使用参数扩展设置默认变量 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.
支持
所以传统上,当我编写带有参数标志的 bash 脚本时,我会使用像这样的基本测试语句来实现默认值
if [ -z $foo ]
then
foo=$bar
fi
今天我遇到了更高级的参数扩展,它们似乎做同样的事情
${foo:=$bar}
这两种方法比较如何?他们 advantages/disadvantages 是什么?
编辑:修复了评论中指出的一些拼写错误
典型的成语是
: ${foo:=$bar}
替代
if [ -z "$foo" ]
then
foo=$bar
fi
(注意引号和空格!)
在前者中,参数扩展处理其他什么都不做的命令的分配。它更简洁,但除此之外没有理由选择其中之一。请注意,两者均受 POSIX.
支持