2 linux bash shell ubuntu logical-operators
我不明白为什么这个if语句会给出错误:
使用太多参数
if [ $file == 'Metro[0-9]*' ] -o [ $file == 'Store[0-9]*' ]
echo "$file"
Run Code Online (Sandbox Code Playgroud)
我确实使用了括号的每一个组合,认为可能会有错误,但没有任何改变。有趣的是,如果我只使用其中一个条件并删除另一个条件,则条件有效。所以我认为使用或括号有问题-o......
没有 shell 操作符-o,您似乎正在寻找
if [[ $file == 'Metro'[0-9]* || $file == 'Store'[0-9]* ]]; then
echo "$file"
fi
Run Code Online (Sandbox Code Playgroud)
这当然写得更加简洁和便携
case $file in 'Metro'[0-9]* | 'Store'[0-9]*) echo "$file";; esac
Run Code Online (Sandbox Code Playgroud)
[[请注意引用中的多个更改:如果您希望展开通配符,则通配符不得位于引号内,并且文件名通常应位于双引号内(尽管在or之后不需要case)。
另请注意,其中的更改[[不是 POSIXsh命令 - 上面的第一个替代命令特定于 Bash / Ksh / 其他“现代”扩展 shell。POSIX [(又名test)没有一种简单的方法来检查文件是否与任意通配符表达式匹配。顺便说一句,Bash 也支持if [ condition1 -o condition2 ],但它也不可移植,所以在某种程度上是两个世界中最糟糕的。