Desde la página del bash
manual:
[[ expression ]]
- devuelve un estado de 0 o 1 dependiendo de la evaluación de la expresión de expresión condicional.
Y, para las expresiones, una de las opciones es:
expression1 && expression2
- cierto si ambos expression1
y expression2
son verdaderos.
Entonces puedes and
juntarlos de la siguiente manera ( -n
es lo contrario de -z
para que podamos deshacernos de !
):
if [[ -n "$var" && -e "$var" ]] ; then
echo "'$var' is non-empty and the file exists"
fi
Sin embargo, no creo que sea necesario en este caso, -e xyzzy
es cierto si el xyzzy
archivo existe y puede manejar fácilmente cadenas vacías. Si eso es lo que quieres, entonces no necesitas el -z
cheque no vacío:
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, solo use:
if [[ -e "$var" ]] ; then
echo "'$var' exists"
fi
bash
; sin embargo, para aprovechar al máximo los "bashismos", vea la respuesta de @ paxdiablo.