协慌网

登录 贡献 社区

在 bash 中使用单个命令将默认值分配给 shell 变量

我在 bash(3.00)shell 脚本中对变量进行了大量测试,如果未设置该变量,则它将分配一个默认值,例如:

if [ -z "${VARIABLE}" ]; then 
    FOO='default'
else 
    FOO=${VARIABLE}
fi

我似乎想起了在一行中执行此操作的语法,类似于三元运算符,例如:

FOO=${ ${VARIABLE} : 'default' }

(尽管我知道那行不通...)

我疯了还是存在类似的东西?

答案

实际上,它与您发布的内容非常接近。您可以使用称为 “bash 参数扩展” 的工具来完成此操作。

要获取分配的值,如果缺少default

FOO="${VARIABLE:-default}"  # If variable not set or null, use default.

或同时将default分配给VARIABLE

FOO="${VARIABLE:=default}"  # If variable not set or null, set it to default.

对于命令行参数:

VARIABLE="${1:-$DEFAULTVALUE}"

它将分配给脚本的第一个参数的值VARIABLE ,如果没有传递此类参数DEFAULTVALUE Qouting 可以防止乱序和单词拆分。

如果变量相同,则

: "${VARIABLE:=DEFAULT_VALUE}"

如果未定义,则将DEFAULT_VALUE分配给VARIABLE双引号可防止出现乱码和单词拆分。

另请参见 Bash 手册中的第 3.5.3 节 “ Shell 参数扩展”。