惯用bash:设置变量的默认值

sle*_*ica 0 bash idiomatic

如何以简洁,惯用的方式为bash变量设置默认值?这看起来很难看:

if [[ ! -z "$1" ]]; then
    option="$1"
else
    option="default"
fi
Run Code Online (Sandbox Code Playgroud)

Tox*_*ris 6

您可以使用:

option=${1:-default}
Run Code Online (Sandbox Code Playgroud)

如果给出了第一个命令行参数且不为空,则这会将选项设置为第一个命令行参数。否则,它将选项设置为默认值。有关参数扩展和此形式的一些有用变体的详细信息,请参阅Bash 参考手册。

  • “请注意,如果您使用显式空的第一个参数调用脚本,则其行为可能与问题中的代码不同。” 不,不会,因为你使用了冒号。如果你写“${1-default}”,那么它将区分未设置和已设置但为空的参数。 (2认同)

bob*_*bah 5

default value               : ${parameter:-word} \
assign default value        : ${parameter:=word}  |_ / if unset or null -
error if empty/unset        : ${parameter:?mesg}  |  \ use no ":" for unset only
use word unless empty/unset : ${parameter:+word} /
Run Code Online (Sandbox Code Playgroud)

  • +1以获得彻底的答案(尽管可能有点过于简洁[缺乏示例])。 (2认同)