2012-03-28 11 views
12

¿Hay alguna manera de evaluar una expresión booleana y asignar su valor a una variable?Expresión booleana de Bash y su asignación de valor

En la mayoría de los lenguajes de scripting hay manera de evalúa por ejemplo

//PHS 
$found= $count > 0 ; //evaluates to a boolean values 

Quiero manera similar a evaluar en bash:

BOOL=[ "$PROCEED" -ne "y" ] ; 

Esto no está funcionando y trató de otra manera, pero no pudo obtener un valor booleano ¿Hay alguna manera de de hacer esto SIN usar IF?

+2

El shell realmente no tiene booleanos. Quizás deberías usar 'true' y' false', que son comandos triviales que simplemente configuran su código de salida (la implementación es básicamente 'exit 0' y' exit 1', respectivamente). Entonces puedes hacer cosas como 'bool = false; $ bool && echo "Sí"; $ bool || echo "No"; mientras que $ bool; dormir 1; hecho' etc. – tripleee

Respuesta

21

Se podría hacer:

[ "$PROCEED" = "y" ] ; BOOL=$? 

Si está trabajando con set -e, se puede utilizar en su lugar:

[ "$PROCEED" = "y" ] && BOOL=0 || BOOL=1 

BOOL pusieron a cero cuando hay un partido, para actuar como típica Códigos de retorno de Unix. Se ve un poco raro.

Esto no arrojará errores, y está seguro de que $BOOL será 0 o 1 después, cualquiera que haya sido antes.

+0

Gracias que funciona :) – sakhunzai

+1

'-ne' y co. son "** aritmética ** operadores binarios" ('man bash'), y no deben usarse para cadenas. Solo usa '='. – l0b0

+1

@ l0b0 gracias He actualizado la pregunta – sakhunzai

1

Asignación:

found=$((count > 0)) 
+1

Funciona solo para pruebas aritméticas. –

12

que sugeriría:

[ "$PROCEED" = "y" ] || BOOL=1 

Esto tiene la ventaja sobre la comprobación $? que funciona incluso cuando está en set -e. (Consulte writing robust shell scripts.)

Cuestiones relacionadas