man bash
:
[[ 表达式 ]]
[...] 表达式由下面条件表达式下描述的主要元素组成。 [[ 和 ]] 之间的单词不进行分词和路径名扩展;
[...] 当使用 == 和 != 运算符时,运算符右侧的字符串被视为模式,并根据模式匹配下描述的规则进行匹配。
整个部分=
没有提及单个的情况。
条件表达式
[...]
string1 == string2
string1 = string2
如果字符串相等则为真。 = 应与测试命令一起使用以确保 POSIX 一致性。
从这个描述我期望
[[ a = $cmpstring ]]
检查相等的字符串和
[[ a == $cmpstring ]]
检查模式匹配。但事实并非如此:
> [[ a == ? ]]; echo $?
0
> [[ a = ? ]]; echo $?
0
> [[ a == "?" ]]; echo $?
1
我是否误解了某些内容,或者 bash 手册页忘记提及=
?
答案1
=
==
和里面的时候一样[[...]]
。根据最新man
页面,在SHELL GRAMMAR
>>Compound Commands
下[[ expression ]]
:
The = operator is equivalent to ==
再往下,在CONDITIONAL EXPRESSIONS
:
string1 == string2
string1 = string2
True if the strings are equal. = should be used with the test command
for POSIX conformance. When used with the [[ command, this performs pattern
matching as described above (Compound Commands).
bash info
页: