通常,当我编写带有参数标志的bash脚本时,我会使用诸如此类的基本测试语句来实现默认值
if [ -z $foo ]
then
foo=$bar
fi
今天我遇到了更高级的参数扩展,它们似乎在做同样的事情
${foo:=$bar}
这两种方法如何比较?他们的优点/缺点是什么?
编辑:修复了注释中指出的一些错字
答案 0 :(得分:5)
典型的成语是
: ${foo:=$bar}
代替
if [ -z "$foo" ]
then
foo=$bar
fi
(请注意引号和空格!)
在前一种情况下,参数扩展处理否则为空的命令的分配。更为简洁,但否则没有理由选择一个。请注意,两者均受POSIX支持。