我想重新创建像这样的东西
if ( arg1 || arg2 || arg 3) {}
我到目前为止,但我得到以下错误
line 11: [.: command not found
if [ $char == $';' -o $char == $'\\' -o $char == $'\'' ]
then ...
我尝试了不同的方式,但似乎没有任何方法some of the ones I tried
答案 0 :(得分:18)
对于bash,您可以使用[[ ]]
表单而非[ ]
表单,内部允许&&
和||
:
if [[ foo || bar || baz ]] ; then
...
fi
否则,您可以在外部使用常用的布尔逻辑运算符:
[ foo ] || [ bar ] || [ baz ]
...或使用特定于test
命令(though modern versions of the POSIX specification describe this XSI extension as deprecated -- see the APPLICATION USAGE section)的运算符:
[ foo -o bar -o baz ]
...这是以下不同的书面形式,同样已弃用:
test foo -o bar -o baz
答案 1 :(得分:4)
Charles' answer是正确的,因为它向您展示了如何对if
语句内的命令进行逻辑运算(并且没有),但它看起来更像是您想要使用{{ 1}}这里:
case
答案 2 :(得分:2)
Bash的[[ ]]
和(( ))
比[ ]
更加强大和灵活。
[[ ]]
用于字符串,(( ))
用于整数逻辑&&
和||
运算符可在[[ ]]
和(( ))
内部使用,而()
可用于分组[[ ]]
或(( ))
内部的变量扩展名-Bash在这些情况下不会进行单词拆分或globing (( ))
内,不需要在变量名后使用$
进行扩展[[ ]]
和(( ))
可以跨越多行,而无需使用\
继续行使用这些,我们可以编写干净,可读性和更可靠的代码。
a=1 b=2 c=3
((a == 2 || (b == 2 && c == 3))) && echo yes # yields yes
x=apple y=mango z=pear
[[ $x == "orange" || ($y == "mango" && $z == "pear") ]] && echo yes # yields yes