Observe que [[ ]]
não está em Bourne nem em POSIX sh
. Para a verdadeira sintaxe sh
, existem várias maneiras de fazer isso.
Usando apenas um par [ ]
if [ 1 -eq "$a" -a \( 1 -eq "$b" -o 2 -eq "$b" \) ]; then
# ...
fi
ou Evitando as opções% POSI -a
e -o
1
if [ 1 -eq "$a" ] && { [ 1 -eq "$b" ] || [ 2 -eq "$b" ]; }; then
# ...
fi
1 Uma razão para evitar -a
e -o
é a portabilidade máxima - nem todas as implementações podem processar mais de 4 argumentos, que é exatamente o que você obtém se você encadeia expressões com test
e [
e -a
.