Como faço para testar expressões complexas com o bash?

Como faço para testar expressões complexas com o bash?

Eu só posso fazer simplesmente expressões como1=1 and 0=1

test 1 = 1 -a 0 = 1 

Mas como fazer expressões complexas como 1=1 and (0=1 or 1=1)?

Responder1

Use várias chamadas de teste:

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

ou [[:

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

Responder2

Você pode usar testor [... ]desde que tenha cuidado, lembrando que os parênteses devem ser escapados e os termos separados por espaços:

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

Isso ecoa 'Sim' para mim. Geralmente é mais fácil, porém, usar o operador Bash e Korn shell [[... em vez disso; ]]você não precisa escapar tanto.

Responder3

A pergunta já foi respondida, mas algumas dicas de estilo que você pode considerar (e talvez rejeitar :-)):

Se é você quem está escrevendo e acha confuso, então talvez:

  • Usar extra() mesmo que não sejam necessários, pode deixar mais claro.
  • Talvez também use loops aninhados em vez de muitas instruções and.

Responder4

Florian está correto acima, mas tenha em mente que o bash também tem expansão aritmética, o que é um pouco melhor quando você compara variáveis.

Veraquipara mais informações.

informação relacionada