Я думаю, что я не понимаю, как делать "и" тесты. Я хотел убедиться, что существовал аргумент, который хорошо работал [ -e $VAR ]
, но оказалось, что он также оценивался как true для пустой строки; который я не хочу.
Как мне «и» их вместе? Или есть другой унарный тест, который выполняет то, что я хочу?
bash
; однако, чтобы в полной мере воспользоваться "bashisms", см. ответ @ paxdiablo.-a
.Из
bash
справочной страницы:И, для выражений, один из вариантов:
Таким образом, вы можете
and
их вместе следующим образом (-n
это противоположность,-z
чтобы мы могли избавиться от!
):Тем не менее, я не думаю, что это необходимо в этом случае,
-e xyzzy
верно, еслиxyzzy
файл существует и может довольно легко обрабатывать пустые строки. Если это то, что вы хотите, то вам на самом деле не нужна-z
непустая проверка:Другими словами, просто используйте:
источник
[[ -e "$var" ]] && echo "'$var' exists"
источник
POSIX
не определяет поведение[
сложных наборов тестов, мы должны избегать использования-a
или-o
с[
. Я читаю это здесь .bash
тег, а не упоминание о POSIX, поэтому я выкладываю эту версию, которая работает подbash
некоторыми другими современными оболочками.bash
или другие современные снаряды, есть еще меньше причин рекомендовать-a
.[ "$var1" -o "$var2" ]
; еслиvar1=(
иvar2=)
, то то, что у нас есть, является проверкой того,-o
является ли оно не пустым, а не является ли оно пустымvar1
илиvar2
нет. Такая двусмысленность - единственная законная причина дляx$var
идиомы в современных (то есть, после 90-х)test
командах с правильным цитированием, и эта идиома должна погибнуть в огне.Просто укажите свою переменную:
Это оценивает,
[ -e "" ]
если$VAR
пусто.Ваша версия не работает, потому что она оценивает
[ -e ]
. Теперь в этом случае bash просто проверяет, является ли единственный аргумент (-e
) непустой строкой.Из справочной страницы:
(Кроме того, это решение имеет дополнительное преимущество работы с именами файлов, содержащими пробелы)
источник
Я нашел ответ сейчас. Спасибо за ваши предложения!
Есть какие-нибудь комментарии по этому поводу? Кажется неэффективным grep дважды, но это работает ...
источник