Desde la página del bashmanual:
[[ 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 expression1y expression2son verdaderos.
Entonces puedes andjuntarlos de la siguiente manera ( -nes lo contrario de -zpara 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 xyzzyes cierto si el xyzzy archivo existe y puede manejar fácilmente cadenas vacías. Si eso es lo que quieres, entonces no necesitas el -zcheque 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.