¿Por qué "nunca usar el operador -a
o -o
"?
Porque pueden ser ambiguos y, por lo tanto, no son compatibles con POSIX :
Las extensiones XSI que especifican los primarios binarios -a y -o y los operadores '(' y ')' se han marcado como obsoletos. (Muchas de las expresiones que las usan están definidas ambiguamente por la gramática dependiendo de las expresiones específicas que se evalúan). Las secuencias de comandos que usan estas expresiones deben convertirse a las formas que se dan a continuación. Aunque muchas implementaciones continuarán admitiendo estas formas obsoletas, las secuencias de comandos deben ser extremadamente cuidadosas cuando se trata de entradas proporcionadas por el usuario que podrían confundirse con estas y otras primarias y operadores. A menos que el desarrollador de la aplicación conozca todos los casos que producen información para el script, las invocaciones como:
test "$1" -a "$2"
debe escribirse como:
test "$1" && test "$2"
¿Cómo puedo hacer "usar varios [
comandos y los operadores &&
y ||
shell)"?
Al hacer múltiples pruebas y encadenarlas usando dichos operadores; por ejemplo:
[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]
podría reescribirse como el equivalente:
[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])
o mejor:
[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }
(
y)
los operadores que agrupan comandos? Si son obsoletos, ¿cuáles son sus reemplazos? (2) ¿Debetest "$1" -a "$2"
ser reemplazado portest "$1" && test "$2"
o por((test "$1" && test "$2"))
? ¿No necesitamos el((..))
?