Compound if statements with multiple expressions in Bash
我想再做点像这样的东西
1 | if ( arg1 || arg2 || arg 3) {} |
我确实做到了,但我得到了以下错误
1 2 3 4 | line 11: [.: command not found if [ $char == $';' -o $char == $'\' -o $char == $'\'' ] then ... |
我试过不同的方法,但似乎没有一个能奏效,我试过的一些方法。
对于bash,您可以使用
1 2 3 | if [[ foo || bar || baz ]] ; then ... fi |
否则,您可以在外部使用常用的布尔逻辑运算符:
1 | [ foo ] || [ bar ] || [ baz ] |
…或者使用特定于
1 | [ foo -o bar -o baz ] |
…这是以下内容的另一种书面形式,同样不赞成:
1 | test foo -o bar -o baz |
Charles的回答是正确的,因为它向您展示了如何在
1 2 3 4 | case $char in \;|\\|\') echo found;; *) echo 'not found';; esac |
巴什的
[[ ]] 表示字符串,(( )) 表示整数逻辑。&& 和|| 运算符可在[[ ]] 和(( )) 内使用,() 可用于分组。- 不需要引用
[[ ]] 或(( )) 中的变量扩展,bash在这些上下文中不进行分词或全局化。 - 在
(( )) 内部,不需要在变量名后面有$ 来扩展变量名。 [[ ]] 和(( )) 可以跨多条线路,不需要用\ 进行线路延续。
使用这些,我们可以编写干净、可读和更可靠的代码。
实例带整数的复合语句1 2 | a=1 b=2 c=3 ((a == 2 || (b == 2 && c == 3))) && echo yes # yields yes |
带字符串的复合语句
1 2 | x=apple y=mango z=pear [[ $x =="orange" || ($y =="mango" && $z =="pear") ]] && echo yes # yields yes |
相关的
- 在bash中,双方括号[]比单方括号[]更可取吗?
- 如何使用双括号或单括号、圆括号、大括号
- 比较整数:Unix和Linux上的算术表达式或条件表达式
- 测试bash中的非零长度字符串:[-n"$var"]或["$var"]
- 条件表达式-bash手册