使用bash中的单个命令将默认值分配给shellvariables
我在bash(3.00)shell脚本中对variables进行了大量testing,如果未设置variables,那么它会分配一个默认值,例如:
if [ -z "${VARIABLE}" ]; then FOO='default' else FOO=${VARIABLE} fi
我似乎记得在一行中有这样的语法,类似于三元运算符,例如:
FOO=${ ${VARIABLE} : 'default' }
(虽然我知道这是行不通的)
我疯了吗,还是有这样的事情存在?
非常接近您发布的内容,实际上:
FOO=${VARIABLE:-default} # If variable not set, use default.
或者,也会将default
分配给VARIABLE
:
FOO=${VARIABLE:=default} # If variable not set, set it to default.
对于命令行参数:
VARIABLE=${1:-DEFAULTVALUE} #set VARIABLE with the value of 1st Arg to the script, #If 1st arg is not entered, set it to DEFAULTVALUE
如果variables是相同的,那么
: "${VARIABLE:=DEFAULT_VALUE}"
如果未定义,则将DEFAULT_VALUE分配给VARIABLE。 双引号可防止通配符和分词。
另请参阅Bash手册中的第3.5.3节“ shell参数扩展” 。
请参阅3.5.3(shell参数扩展)
所以在你的情况
${VARIABLE:−default}
即使你可以使用像默认值的另一个variables的值
有一个文件defvalue.sh
#!/bin/bash variable1=$1 variable2=${2:-$variable1} echo $variable1 echo $variable2
运行./defvalue.sh first-value second-value
输出
first-value second-value
并运行./defvalue.sh first-value
输出
first-value first-value
那么就可以更加简洁地expression你的“if”结构:
FOO='default' [ -n "${VARIABLE}" ] && FOO=${VARIABLE}
这是一个例子
#!/bin/bash default='default_value' value=${1:-$default} echo "value: [$value]"
将其保存为script.sh并使其可执行。 运行它没有params
./script.sh > value: [default_value]
用param运行它
./script.sh my_value > value: [my_value]
FWIW,你可以提供这样的错误信息:
USERNAME=${1:?"Specify a username"}
这将显示一条消息,并以代码1退出:
./myscript.sh ./myscript.sh: line 2: 1: Specify a username
一个更完整的例子:
#!/bin/bash ACTION=${1:?"Specify 'action' as argv[1]"} DIRNAME=${2:-$PWD} OUTPUT_DIR=${3:-${HOMEDIR:-"/tmp"}} echo "$ACTION" echo "$DIRNAME" echo "$OUTPUT_DIR"
输出:
$ ./script.sh foo foo /path/to/pwd /tmp $ export HOMEDIR=/home/myuser $ ./script.sh foo foo /path/to/pwd /home/myuser
-
$ACTION
取第一个参数的值,如果为空则退出 -
$DIRNAME
是第二个参数,默认为当前目录 -
$OUTPUT_DIR
是第三个参数,或$HOMEDIR
(如果已定义),否则,/tmp
。 这适用于OS X,但我不是积极的,它是可移植的。