Desde la página de manual bash
:
[[ expression ]]
- devolverá un estado de 0 ó 1 dependiendo de la evaluación de la expresión expresión condicional.
Y, de manifestación, una de las opciones es:
expression1 && expression2
- cierto si tanto expression1
y expression2
son ciertas.
Para que pueda and
juntos de la siguiente manera (-n
es lo contrario de -z
para que podamos deshacernos de la !
):
if [[ -n "$var" && -e "$var" ]] ; then
echo "'$var' is non-empty and the file exists"
fi
Sin embargo, no creo que se necesita en este caso , -e xyzzy
es verdadero si existe el archivo xyzzy
y puede manejar bastante fácilmente las cadenas vacías. Si eso es lo que quieres, entonces en realidad no necesita el cheque -z
no vacía:
pax> VAR=xyzzy
pax> if [[ -e $VAR ]] ; then echo yes ; fi
pax> VAR=/tmp
pax> if [[ -e $VAR ]] ; then echo yes ; fi
yes
En otras palabras, sólo tiene que utilizar:
if [[ -e "$var" ]] ; then
echo "'$var' exists"
fi
Esta solución funciona incluso en conchas estrictamente POSIX y por lo tanto también en 'bash'; sin embargo, para aprovechar al máximo los "bashismos", consulte la respuesta de @paxdiablo. – mklement0
Muy contento de ver esto aconsejado en lugar del obsoleto '-a'. –
Encontré otra explicación excelente y detallada: http://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash – valentt