当测试字符串包含通配符时,==
是否像IN
运算符一样运行?这太神奇了......
example1:
string='My long string';
if [[ $string == *"My long"* ]]; then echo "It's there!"; fi
输出:
It's There
例2:
if [[ *"My long"* == $string ]]; then echo "It's there!"; fi
没有输出。
答案 0 :(得分:4)
这就是[[ ]]
设计工作的方式。它在手册中:
当使用'=='和'!='运算符时,运算符右侧的字符串被视为模式,并根据模式匹配中的下述规则进行匹配。
答案 1 :(得分:2)
Glob模式仅适用于比较的右侧,这就是
的原因if [[ *"My long"* == $string ]]; then echo "It's there!"; fi
会失败。
即使这样也行不通:
[[ *"My long"* == "My long" ]] && echo "It's there!"
但这会奏效:
[[ "My long" == *"My long"* ]] && echo "It's there!"
It's there!
如果你问这是如何运作的:
string='My long string';
if [[ $string == *"My long"* ]]; then echo "It's there!"; fi
然后,由于在使用glob
*
匹配,它正在运行
这意味着匹配文字文本"My long"
之前和之后的任何内容,因为您的输入确实包含"My long"
,因此匹配成功。