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

setting default variables with parameter expansion vs if/else test -z

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

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

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

${foo:=$bar}

这两种方法比较如何?他们 advantages/disadvantages 是什么?

编辑:修复了评论中指出的一些拼写错误

典型的成语是

: ${foo:=$bar}

替代

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

(注意引号和空格!)

在前者中,参数扩展处理其他什么都不做的命令的分配。它更简洁,但除此之外没有理由选择其中之一。请注意,两者均受 POSIX.

支持