Bash'if'变种

时间:2013-05-16 13:22:36

标签: bash if-statement syntax

bash中的以下if语句有什么区别吗?

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
if [ -z "$debian_chroot" -a  -r /etc/debian_chroot ]; then

我更喜欢哪一个?这些都是“更好”吗?

2 个答案:

答案 0 :(得分:3)

-a并非在所有较旧的(POSIX之前的)shell中都可用,因此在尝试移植时,您应该更喜欢&&

也就是说,如果您只支持bash,请使用其内置的[[ ]]工具,该工具允许{/ 1}} 范围内进行测试,而不是仅在其外部进行(和,作为一个额外的奖励,使引用可选):

&&

另见http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

答案 1 :(得分:3)

首先是首选。有关原因,请参阅POSIX standard for the test built-in的“应用程序使用情况”部分。简而言之,由于某些表达的含义含糊不清,-a是一个标记为过时的扩展名。