如果想在 shell (sh) 中表达以下测试:
if ( a == 1 && ( b == 1 || b == 2 )) { ... }
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能写的最好的是:
if [[ $a -eq 1 ]]; then
if [[ $b -eq 1 || $b -eq 2 ]]; then
...
fi
fi
Run Code Online (Sandbox Code Playgroud)
我不知道如何复合&&和|| 具有正确的优先级。谷歌搜索没有给我任何答案(教程只给出基本的例子,如果有的话)
将这两个if合二为一的语法是什么?
jw0*_*013 15
请注意,[[ ]]
它不在 Bourne 或 POSIX 中sh
。对于真正的sh
语法,有几种方法可以做到这一点。
只使用一[ ]
对
if [ 1 -eq "$a" -a \( 1 -eq "$b" -o 2 -eq "$b" \) ]; then
# ...
fi
Run Code Online (Sandbox Code Playgroud)
或避免 POSIX-a
和-o
选项1
if [ 1 -eq "$a" ] && { [ 1 -eq "$b" ] || [ 2 -eq "$b" ]; }; then
# ...
fi
Run Code Online (Sandbox Code Playgroud)
1个一个原因,避免-a
和-o
最大便携性-不是所有test
或[
实现可以处理超过4个参数,而这恰恰是如果您将表达式与你所得到的-a
和-o
和\( \)
。
归档时间: |
|
查看次数: |
29509 次 |
最近记录: |