2011-05-28 14 views

Respuesta

3

Usted no puede hacer eso, pero se puede hacer esto:

if [ ! true ] || [ true ] 

Como regla general, nunca trate de utilizar los -a o -o opciones para [.

5

El problema aquí es que [ es un simple comando buildtin en bash (otra manera de escribir test), que sólo puede interpretar lo que los parámetros se pone, mientras ( es un personaje del operador. El análisis de operadores viene antes de la ejecución del comando.

Para utilizar ( y ) con [, hay que citarlos:

if [ \(! true \) -o true ] 
then 
    echo "Success!" 
else 
    echo "Fail!" 
fi 

o

if [ '(' ! true ')' -o true ] 
then 
    echo "Success!" 
else 
    echo "Fail!" 
fi 

El [[ ... ]] construcción es una construcción sintáctica especial que no tiene las limitaciones sintácticas de costumbre comandos, ya que funciona en otro nivel. Por lo tanto, aquí no necesita citar sus paréntesis, como dijo Ignacio. (Además, debe utilizar && y || en lugar de -a y -o aquí)

Cuestiones relacionadas