我可以执行以下命令来检查"abc"
内部$s
带有星号的字符串作为字符串通配符
if [[ $s == *"abc"* ]]; then echo 1; fi
但在 an 中echo
,星号用作目录列表。
echo [[ $s == *"abc"* ]]
如何将 echo 中的通配符用作字符串通配符?s
如果包含,预期输出应为 1 abc
。
我可以执行以下命令来检查"abc"
内部$s
带有星号的字符串作为字符串通配符
if [[ $s == *"abc"* ]]; then echo 1; fi
但在 an 中echo
,星号用作目录列表。
echo [[ $s == *"abc"* ]]
如何将 echo 中的通配符用作字符串通配符?s
如果包含,预期输出应为 1 abc
。
第一行的语法是
if <command>; then ...
,也就是说,[[
被当作一个命令(而且它是一个特殊的内置命令,有自己独特的通配符规则)。但是,第二行的语法不是
echo <command>
. 您不能发出任何命令来echo
喜欢那样;它只会写出 the[[
和 the$s
作为普通文本参数——没有进行比较,也没有应用特殊的通配符规则(并不是说它们会有用,因为没有进行字符串比较)。也就是说,它基本上就像
echo ls /etc
- 它什么也不会ls
,它只会打印“ls /etc”这个词。如果你想在外部进行字符串比较
if
,你仍然需要[[
作为一个单独的命令运行,通过检查或打印它的返回码$?
。例如:请注意,退出代码用于
0
成功。如果你想要 1,使用$(( ... ))
算术展开:如果你真的希望它在一个命令中,你可以将它塞进一个
$(...)
替换中:[[ $s == *abc* ]]; echo $?
...但这实际上与一开始所做的相同。