echo 中的字符串比较通配符

echo 中的字符串比较通配符

我可以执行以下命令来检查"abc"里面$s带有星号的字符串字符串通配符

 if [[ $s == *"abc"* ]]; then echo 1; fi

但在 中echo,星号的作用是目录列表

echo [[ $s == *"abc"* ]]

我怎样才能在 echo 中使用通配符字符串通配符s? 如果包含,则预期输出应为 1 abc

答案1

第一行的语法是if <command>; then ...,也就是说,[[被视为一个命令(它是一个特殊的内置命令,有自己独特的通配符规则)。

但是第二行的语法是不是 echo <command>.你不能给予任何命令就是echo这样;它只会写出[[$s作为普通文本参数——没有进行比较,也没有应用特殊的通配符规则(由于没有进行字符串比较,所以它们没有用)。

也就是说,它基本上就像echo ls /etc- 它不会执行ls任何操作,它只会打印单词“ls /etc”。

如果要在 之外进行字符串比较if,您仍然需要将[[作为单独的命令运行,通过 检查或打印其返回代码$?。例如:

[[ $s == *abc* ]]
echo "Result is $?"

请注意,退出代码用于0表示成功。如​​果您想要 1,请使用$(( ... ))算术扩展:

echo "Result is $(( ($? == 0) ? 1 : 0 ))"
echo "Result is $(( !$? ))"

如果你真的如果您想让它成为一条命令,您可以将其塞进替换中$(...)

echo $( [[ $s == *abc* ]]; echo $? )

[[ $s == *abc* ]]; echo $?...但这实际上和一开始所做的一样。

相关内容