我找不到两者之间的区别:
[ $foo = b* ]
[ $foo == b* ]
[[ $foo = b* ]]
[[ $foo == b* ]]
最佳答案
[]
与 [[ ]]
一般情况下在 Is [[ ]] preferable over [ ] in bash scripts? 中介绍了所以我们不要碰它。
=
与 ==
:
在 [ ] 内
=
是 POSIX 并且 checks if strings are equal==
是 Bash 定义的别名,参见man bash
。
所以只使用 =
因为它更便携而且更短。
在 [[ ]] 内
[[ ]]
不是 POSIX,因此我们仅引用 man bash
。
它在 CONDITIONAL EXPRESSIONS
下说 =
和 ==
在 [[ ]]
和两者都按照“复合命令”中的描述进行模式匹配。
然后“复合命令”与用于 glob 扩展的模式相同,例如:
[[ 'abcde' = ?b[cC]* ]] && echo true
可能带有 extglob
扩展。
请注意,您必须不引用该模式:它不会像往常一样扩展到文件。如果你引用它,你就失去了模式匹配的魔力,得到的是文字字符。
关于string - 双方括号和单方括号 [ 和 [[ 以及等号 = 和 == 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8343551/