String 双方括号和单方括号[和[[以及等号=和=]之间的区别是什么?

String 双方括号和单方括号[和[[以及等号=和=]之间的区别是什么?,string,bash,testing,comparison,String,Bash,Testing,Comparison,我找不到以下两者之间的区别: [ $foo = b* ] [ $foo == b* ] [[ $foo = b* ]] [[ $foo == b* ]] 检查[]和[[]]之间的差异 =和= =是赋值运算符 =等式检查运算符或条件运算符[]vs[[]]]通常在中介绍,所以我们不要碰它 =vs=: 内部[] =是POSIX和 =是Bash定义的别名,请参见manbash 因此,只需使用=,因为它更便于携带,而且更短 内部[[]] [[]]不是POSIX,所以我们只参考man bash 它在

我找不到以下两者之间的区别:

[ $foo = b* ]
[ $foo == b* ]

[[ $foo = b* ]]
[[ $foo == b* ]]

检查
[]
[[]]
之间的差异

=
=

=
是赋值运算符


=
等式检查运算符或条件运算符

[]
vs
[[]]]
通常在中介绍,所以我们不要碰它

=
vs
=

内部[]

  • =
    是POSIX和
  • =
    是Bash定义的别名,请参见
    manbash
因此,只需使用
=
,因为它更便于携带,而且更短

内部[[]]

[[]]
不是POSIX,所以我们只参考
man bash

它在
条件表达式下指出
=
=
[[]]
中是相同的,并且都按照“复合命令”中所述进行模式匹配

然后,“复合命令”与用于全局扩展的模式相同,例如:

[[ 'abcde' = ?b[cC]* ]] && echo true
可能带有
extglob
扩展名


请注意,您不能引用该模式:它不会像往常一样全局扩展到文件。如果您引用它,您将失去模式匹配的魔力并获得文字字符。

在上做一些阅读,如果您不理解某些内容,请回到这里。这也是一个非常好的方法。请查看不完全。在
[]
[[]]
=
是一个字符串相等比较,而不是赋值。
[[]]
和一些
[]
的实现也接受
=
作为同义词。(另外,我不确定“条件运算符”是什么意思。)