我正在阅读有关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手册部分中,可以找到更完整的差异列表。
使用[]时,你想要你的脚本是跨弹便携。使用[[]],如果你想不被支持的条件表达式[],不需要是便携式的。
www说
TA贡献1775条经验 获得超8个赞
在用于状态测试的单括号内(即[...]),=所有shell都支持某些运算符,例如single ,而==某些较早的Shell不支持使用operator 。
里面的条件测试(即[[...]])双括号,有使用没有任何区别=或==旧或新的炮弹。
编辑:我还应该注意:在bash中,请尽可能使用双括号[[...]],因为它比单括号更安全。我将通过以下示例说明原因:
if [ $var == "hello" ]; then
如果$ var恰好为null /空,那么脚本将显示以下内容:
if [ == "hello" ]; then
这会破坏您的脚本。解决方案是使用双括号,或者始终记住在变量("$var")周围加上引号。双括号是更好的防御性编码实践。
- 3 回答
- 0 关注
- 1014 浏览
添加回答
举报
0/150
提交
取消