使用参数扩展与 IF/else 测试 -Z 设置默认变量



所以传统上,当我编写带有参数标志的 bash 脚本时,我会使用这样的基本测试语句实现默认值

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

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

${foo:=$bar}

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

编辑:修复了评论中指出的一些错别字

典型的成语是

: ${foo:=$bar}

作为

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

(注意引号和空格!

在前者中,参数扩展处理否则不执行任何操作的命令的分配。它更简洁,但除此之外,几乎没有理由选择一个而不是另一个。请注意,POSIX 支持两者。

最新更新