Bash中单方括号和双方括号之间的区别

我正在阅读有关bash的示例,if但有些示例用单方括号括起来:


if [ -f $param ]

then

  #...

fi

其他带有双方括号的:


if [[ $? -ne 0 ]]

then

    start looking for errors in yourlog

fi

有什么区别?


胡说叔叔
浏览 890回答 3
3回答

MMTTMM

单个[]是posix shell兼容条件测试。Double [[]]是对标准的扩展,[]并由bash和其他shell(例如zsh,ksh)支持。它们支持额外的操作(以及标准的posix操作)。例如:||而不是和-o与regex匹配=~。在条件构造的bash手册部分中,可以找到更完整的差异列表。使用[]时,你想要你的脚本是跨弹便携。使用[[]],如果你想不被支持的条件表达式[],不需要是便携式的。

www说

在用于状态测试的单括号内(即[...]),=所有shell都支持某些运算符,例如single ,而==某些较早的Shell不支持使用operator 。里面的条件测试(即[[...]])双括号,有使用没有任何区别=或==旧或新的炮弹。编辑:我还应该注意:在bash中,请尽可能使用双括号[[...]],因为它比单括号更安全。我将通过以下示例说明原因:if [ $var == "hello" ]; then如果$ var恰好为null /空,那么脚本将显示以下内容:if [ == "hello" ]; then这会破坏您的脚本。解决方案是使用双括号,或者始终记住在变量("$var")周围加上引号。双括号是更好的防御性编码实践。
打开App,查看更多内容
随时随地看视频慕课网APP