¿Cómo pruebo expresiones complejas con bash?

¿Cómo pruebo expresiones complejas con bash?

Sólo puedo hacer expresiones simples como1=1 and 0=1

test 1 = 1 -a 0 = 1 

Pero, ¿cómo hacer expresiones complejas como 1=1 and (0=1 or 1=1)?

Respuesta1

Utilice varias llamadas de prueba:

test 1 = 1 && test 0 = 1 -o 1 = 1

o [[:

[[ 1 = 1 && (0 = 1 || 1 = 1) ]]

Respuesta2

Puedes usar testo [... ]siempre y cuando tengas cuidado, recordando que los paréntesis deben tener escape y los términos deben estar separados por espacios:

if [ \( a = a \) -a \( a = b -o b = b \) ]
then echo Yes
else echo No
fi

Eso me hace eco de un 'Sí'. Sin embargo, suele ser más fácil utilizar el operador de shell Bash y Korn [[... ]]en su lugar; no tienes que hacer tanto para escapar.

Respuesta3

La pregunta ya está respondida, pero un par de consejos de estilo que podrías considerar (y tal vez rechazar :-)):

Si eres tú quien lo escribe y te resulta confuso, entonces tal vez:

  • Utilice extra () incluso si no son necesarios, podría aclararlo.
  • También es posible utilizar bucles anidados en lugar de muchas declaraciones y.

Respuesta4

Florian tiene razón en su mayor parte, pero tenga en cuenta que bash también tiene expansión aritmética, lo cual es un poco mejor cuando se comparan variables.

Veraquípara más información.

información relacionada