2012-06-29 13 views
11

vorrei ricreare qualcosa di simileespressione multipla if in Bash

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

e ho ottenuto finora, ma ottengo il seguente errore

line 11: [.: command not found 

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

ho provato diversi modi, ma nessuno sembra funzionare some of the ones I tried

+0

Probabilmente non c'è bisogno di usare '$ '''. –

+0

L'uso di '==' all'interno di '[]' non è attualmente POSIX sh valido, anche se bash lo consente. Utilizzare solo un singolo '=' per i test di confronto delle stringhe. –

risposta

17

per bash, è possibile utilizzare il [[ ]] forma piuttosto che [ ], che permette && e || internamente:

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

In caso contrario, è possibile utilizzare gli operatori logici booleani solite esternamente:

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

... o utilizzare operatori specifici al comando test (though modern versions of the POSIX specification describe this XSI extension as deprecated -- see the APPLICATION USAGE section):

[ foo -o bar -o baz ] 

... che è una forma scritta in modo diverso del seguente, che è altrettanto deprecato:

test foo -o bar -o baz 
+1

Avrei giurato di averlo provato prima senza risultato .. probabilmente ha fatto qualcosa di diverso, grazie! – david

4

Charles' answer è corretto nel senso che vi mostra come fare operazioni logiche sui comandi all'interno (e senza, per questo) un if dichiarazione, ma sembra più come si desidera utilizzare case qui:

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

Buona chiamata - devo ammettere che ho guardato un po 'troppo alla domanda letterale piuttosto che all'intento. –