2012-06-29 8 views
11

Chciałbym odtworzyć coś takiegoMultiple wyrażenie if w Bash

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

a ja nie mam tak daleko, ale pojawia się następujący błąd

line 11: [.: command not found 

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

Próbowałem różnych sposobów, ale żaden wydają się działać some of the ones I tried

+0

Prawdopodobnie nie ma potrzeby używania '$ '''. –

+0

Używanie '==' wewnątrz '[]' nie jest faktycznie poprawnym POSIX sh, nawet jeśli pozwala na to bash. Używaj tylko jednego '=' do testowania porównywania ciągów. –

Odpowiedz

17

dla bash, można użyć [[ ]] formę zamiast [ ], który pozwala && i || wewnętrznie:

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

W przeciwnym razie, można użyć zwykłych operatorów logicznych logicznych zewnętrznie:

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

... lub używać operatorów specyficznych dla komendy test (though modern versions of the POSIX specification describe this XSI extension as deprecated -- see the APPLICATION USAGE section):

[ foo -o bar -o baz ] 

... inaczej napisana forma, która jest podobnie przestarzała:

test foo -o bar -o baz 
+1

Przysiągłbym, że spróbowałem tego wcześniej bez rezultatu ... prawdopodobnie zrobiłem coś innego, dziękuję! – david

4

Charles' answer ma rację, że to pokazuje, jak to zrobić operacje logiczne na poleceniach wewnątrz (i bez, dla tej sprawy) oświadczenie if, ale wygląda bardziej jak chcesz korzystać case tutaj:

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

Dobre wezwanie - wprawdzie trochę spojrzałem na dosłowne pytanie, a nie na intencje. –