我有一个例子
o="o"
if [[ *"aoei"* == $o ]]; then echo 5; fi;
这个例子中的星号表示什么意思?
ps 顺序重要吗?if [[ *"o"* == $o ]]
vsif [[ $o == *"o"* ]]
答案1
秩序至关重要。记录为[[
条件构造, 这==
运算符是模式匹配运算符右手一侧是全局模式(又名“通配符”)。
[[ *"o"* == $o ]]
测试字符串是否与*o*
变量中包含的模式匹配$o
[[ $o == *"o"* ]]
测试变量中包含的字符串是否$o
与模式匹配*o*
(即 $o 的内容包含一个o
)
请注意,该模式的*"aoei"*
意思是:零个或多个任意字符,后跟精确序列aoei
,后跟零个或多个任意字符。也许您想要的模式*[aoei]*
是:包含一个a
或一个o
或一个e
或一个i
。
演示:
$ o="o"
$ if [[ *"aoei"* == $o ]]; then echo 5; fi; # no output
$ if [[ $o == *"aoei"* ]]; then echo 5; fi; # no output
$ o="AaoeiBC"
$ if [[ *"aoei"* == $o ]]; then echo 5; fi; # no output
$ if [[ $o == *"aoei"* ]]; then echo 5; fi;
5
$ o="o"
$ if [[ *[aoei]* == $o ]]; then echo 5; fi; # no output
$ if [[ $o == *[aoei]* ]]; then echo 5; fi;
5