Por que "nunca use o operador -a
ou -o
"?
Porque eles podem ser ambíguos e, portanto, não são compatíveis com POSIX :
As extensões XSI que especificam as primárias binárias -a e -o e os operadores '(' e ')' foram marcadas como obsoletas. (Muitas expressões que as utilizam são definidas de forma ambígua pela gramática, dependendo das expressões específicas que estão sendo avaliadas.) Os scripts que usam essas expressões devem ser convertidos para os formulários abaixo. Embora muitas implementações continuem suportando esses formulários obsoletos, os scripts devem ser extremamente cuidadosos ao lidar com as entradas fornecidas pelo usuário que possam ser confundidas com essas e outras primárias e operadores. A menos que o desenvolvedor do aplicativo conheça todos os casos que produzem entrada para o script, chamadas como:
test "$1" -a "$2"
deve ser escrito como:
test "$1" && test "$2"
Como posso "usar vários [
comandos e os operadores &&
e ||
shell)"?
Fazendo vários testes e encadeando-os usando os referidos operadores; por exemplo:
[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]
pode ser reescrito como o equivalente:
[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])
ou melhor:
[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }
(
e)
os operadores que agrupam comandos? Se eles são obsoletos, qual é o seu substituto? (2) Devetest "$1" -a "$2"
ser substituído portest "$1" && test "$2"
, ou por((test "$1" && test "$2"))
? Não precisamos do((..))
?