繁体   English   中英

如何知道参数是否传递给我的bash脚本?

[英]How to know if an argument was passed to my bash script?

假设我有一个bash脚本scr.sh 在此脚本中,我有一个变量$x 我需要设置以下行为。 如果使用参数调用scr.sh ,如下所示:

./scr.sh 45

那么我想在我的bash脚本中将x分配给该值。 否则,如果没有命令行参数,则如下所示:

./scr.sh

应该将x分配给某个默认值,在我的情况下,它是一个环境变量,例如x=$ENVIRONMENT_VAR

我怎样才能做到这一点?

您可以使用它来设置默认值:

x="${1:-$ENVIRONMENT_VAR}"

${parameter:-word}
   Use Default Values. If parameter is unset or null, the expansion of word is
   substituted. Otherwise, the value of parameter is substituted.

@Cyrus已很好地回答了这个问题,但我想对${parameter:-word}方法进行一些改动,即:

: ${x:=${1-$ENVIRONMENT_VAR}}

这使您可以更进一步,并在调用脚本时提交覆盖功能。 在下面,您可以看到使用此方法可以拥有的三个不变式:

$ ./src.sh
x=42
$ ./src.sh 8
x=8
$ x=2 ./src.sh 8
x=2

用于以上输出的脚本:

$ cat ./src.sh
#!/usr/bin/env bash

ENVIRONMENT_VAR=42
: ${x:=${1-$ENVIRONMENT_VAR}}
echo "x=${x}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM