使用参数扩展与if / else test -z设置默认变量

时间:2018-07-06 19:33:52

标签: bash parameters optional-parameters parameter-expansion

通常,当我编写带有参数标志的bash脚本时,我会使用诸如此类的基本测试语句来实现默认值

if [ -z $foo ]
then
    foo=$bar
fi

今天我遇到了更高级的参数扩展,它们似乎在做同样的事情

${foo:=$bar}

这两种方法如何比较?他们的优点/缺点是什么?

编辑:修复了注释中指出的一些错字

1 个答案:

答案 0 :(得分:5)

典型的成语是

: ${foo:=$bar}

代替

if [ -z "$foo" ]
then
    foo=$bar
fi

(请注意引号和空格!)

在前一种情况下,参数扩展处理否则为空的命令的分配。更为简洁,但否则没有理由选择一个。请注意,两者均受POSIX支持。