我可以执行以下命令来检查"abc"内部是否$s有星号作为字符串通配符的字符串
if [[ $s == *"abc"* ]]; then echo 1; fi
Run Code Online (Sandbox Code Playgroud)
但在 an 内部echo,星号充当目录列表。
echo [[ $s == *"abc"* ]]
Run Code Online (Sandbox Code Playgroud)
如何将 echo 中的通配符用作字符串通配符?s如果包含 ,则预期输出应为 1 abc。
第一行的语法是if <command>; then ...,即[[被视为命令(并且它是一个特殊的内置命令,有自己独特的通配符规则)。
然而,第二行的语法不是 echo <command>。你不能发出任何echo这样的命令;它只会写出[[和$s作为普通文本参数 \xe2\x80\x93 不进行比较,并且不应用特殊的通配符规则(并不是说它们会有用,因为没有进行字符串比较)。
也就是说,它基本上就像echo ls /etc\xe2\x80\x93 它不会有ls任何东西,它只会打印单词“ls /etc”。
如果您想在 之外进行字符串比较if,您仍然需要将 运行[[为单独的命令,通过 来检查或打印其返回代码$?。例如:
[[ $s == *abc* ]]\necho "Result is $?"\nRun Code Online (Sandbox Code Playgroud)\n请注意,退出代码用于0成功。如果你想要 1,请使用$(( ... ))算术展开式:
echo "Result is $(( ($? == 0) ? 1 : 0 ))"\necho "Result is $(( !$? ))"\nRun Code Online (Sandbox Code Playgroud)\n如果你真的希望它在一个命令中,你可以将它塞进一个$(...)替换中:
echo $( [[ $s == *abc* ]]; echo $? )\nRun Code Online (Sandbox Code Playgroud)\n...但这实际上与[[ $s == *abc* ]]; echo $?一开始所做的相同。
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |