为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡说叔叔 2019-11-07 13:02:08
我正在阅读有关bash的示例,if但有些示例用单方括号括起来:if [ -f $param ]then  #...fi其他带有双方括号的:if [[ $? -ne 0 ]]then    start looking for errors in yourlogfi有什么区别?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

单个[]是posix shell兼容条件测试。


Double [[]]是对标准的扩展,[]并由bash和其他shell(例如zsh,ksh)支持。它们支持额外的操作(以及标准的posix操作)。例如:||而不是和-o与regex匹配=~。在条件构造的bash手册部分中,可以找到更完整的差异列表。


使用[]时,你想要你的脚本是跨弹便携。使用[[]],如果你想不被支持的条件表达式[],不需要是便携式的。


查看完整回答
反对 回复 2019-11-07
?
www说

TA贡献1775条经验 获得超8个赞

在用于状态测试的单括号内(即[...]),=所有shell都支持某些运算符,例如single ,而==某些较早的Shell不支持使用operator 。


里面的条件测试(即[[...]])双括号,有使用没有任何区别=或==旧或新的炮弹。


编辑:我还应该注意:在bash中,请尽可能使用双括号[[...]],因为它比单括号更安全。我将通过以下示例说明原因:


if [ $var == "hello" ]; then

如果$ var恰好为null /空,那么脚本将显示以下内容:


if [ == "hello" ]; then

这会破坏您的脚本。解决方案是使用双括号,或者始终记住在变量("$var")周围加上引号。双括号是更好的防御性编码实践。


查看完整回答
反对 回复 2019-11-07
  • 3 回答
  • 0 关注
  • 858 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信