Usar el operador && en una declaración if

82

Tengo tres variables:

VAR1="file1"
VAR2="file2"
VAR3="file3"

Cómo usar el &&operador and ( ) en una declaración if como esta:

if [ -f $VAR1 && -f $VAR2 && -f $VAR3 ]
   then ...
fi

Cuando escribo este código da error. ¿Cuál es la manera correcta?

Ziyaddin Sadigov
fuente

Respuestas:

170

Entonces, para que su expresión funcione, cambiar &&por -aserá suficiente.

Es correcto así:

 if [ -f $VAR1 ] && [ -f $VAR2 ] && [ -f $VAR3 ]
 then  ....

o me gusta

 if [[ -f $VAR1 && -f $VAR2 && -f $VAR3 ]]
 then  ....

o incluso

 if [ -f $VAR1 -a -f $VAR2 -a -f $VAR3 ]
 then  ....

Puede encontrar más detalles en esta pregunta bash: Múltiples operadores unarios en la declaración if y algunas referencias dadas allí como ¿Cuál es la diferencia entre prueba, [y [[? .

fedorqui 'ASÍ que deja de hacer daño'
fuente
14
Tenga en cuenta que POSIX recomienda el uso de &&y ||con la notación de un solo corchete encima de -ay -o, por lo que si está escribiendo código portátil, elija la primera notación, de lo contrario la segunda y omita la tercera, especialmente porque puede resultar incómodo y difícil de leer si lo necesita para agrupar expresiones.
Adrian Frühwirth