2012-06-29 11 views
11

me gustaría volver a crear algo como estoexpresión múltiple sentencia if en Bash

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

y yo conseguido hasta ahora, pero me sale el siguiente error

line 11: [.: command not found 

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

Probé diferentes maneras, pero ninguno parecen funcionar some of the ones I tried

+0

Probablemente no sea necesario usar '$ '''. –

+0

Usar '==' dentro de '[]' no es realmente válido POSIX sh, aunque bash lo permite. Use solo un '' 'para las pruebas de comparación de cadenas. –

Respuesta

17

para bash, puede utilizar el formulario de [[ ]] en lugar de [ ], que permite && y || internamente:

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

De lo contrario, puede utilizar los operadores lógicos booleano habituales externamente:

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

... o utilizar operadores específicos 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 ] 

... que es una forma escrita diferente de lo siguiente, que igualmente está en desuso:

test foo -o bar -o baz 
+1

Juraría que intenté esto antes sin resultado ... probablemente hice algo diferente, ¡gracias! – david

4

Charles' answer es correcta, ya que muestra cómo hacer operaciones lógicas sobre los comandos dentro (y fuera, para el caso) una declaración if, pero se ve más como desea utilizar case aquí:

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

Buena llamada. De hecho, miré un poco más la cuestión literal que la intención. –

Cuestiones relacionadas