
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 test
or [
... ]
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.