Из 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
; однако, чтобы в полной мере воспользоваться "bashisms", см. ответ @ paxdiablo.