bash 星号 *“str”* 内的引号是什么意思

bash 星号 *“str”* 内的引号是什么意思

我有一个例子

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

相关内容