2012-06-29 113 views
11

我想重新像這樣多表達if語句中的Bash

if (arg1 || arg2 || arg 3) {} 

,我沒有走到這一步,但我得到以下錯誤

line 11: [.: command not found 

if [ $char == $';' -o $char == $'\\' -o $char == $'\'' ] 
then ... 

我嘗試不同的方法,但沒有似乎工作some of the ones I tried

+0

可能沒有必要使用'$'''。 –

+0

儘管bash允許,但在[]中使用'=='實際上並不是有效的POSIX sh。字符串比較測試只使用一個'='。 –

回答

17

對於bash,你可以使用[[ ]]形式,而不是[ ],它允許&&||內部:

if [[ foo || bar || baz ]] ; then 
    ... 
fi 

否則,可以從外部使用通常的布爾邏輯運算符:特定

[ foo ] || [ bar ] || [ baz ] 

...或使用運營商的命令testthough 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

我會發誓我之前試過這個沒有結果..可能做了一些不同的,謝謝! – david

4

Charles' answer是正確的,因爲它表明你如何做邏輯運算上的命令內(並且沒有,對於這個問題)的if語句,但像你想在這裏使用case它看起來更多:

case $char in 
    \;|\\|\') echo found;; 
    *) echo 'not found';; 
esac 
+0

良好的電話 - 不出所料,我對字面問題的看法有點多,而不是意圖。 –