З сторінки сторінки bash:
[[ expression ]] - повернути статус 0 або 1 залежно від оцінки виразу умовного виразу.
І для виразів одним із варіантів є:
expression1 && expression2- вірно, якщо і те, expression1і інше expression2.
Таким чином, ви можете зробити andїх разом наступним чином ( -nце навпаки, -zщоб ми могли позбутися !):
if [[ -n "$var" && -e "$var" ]] ; then
echo "'$var' is non-empty and the file exists"
fi
Однак я не думаю, що це потрібно в цьому випадку, -e xyzzyце правда, якщо xyzzy файл існує і може досить легко обробляти порожні рядки. Якщо це те, що ви хочете, тоді вам фактично не потрібен -zне порожній чек:
pax> VAR=xyzzy
pax> if [[ -e $VAR ]] ; then echo yes ; fi
pax> VAR=/tmp
pax> if [[ -e $VAR ]] ; then echo yes ; fi
yes
Іншими словами, просто використовуйте:
if [[ -e "$var" ]] ; then
echo "'$var' exists"
fi
bash; проте, щоб повною мірою скористатися "башизмами", див. відповідь @ paxdiablo.