Почему -d возвращает true для пустой переменной - PullRequest
1 голос
/ 07 октября 2019

Предположим, я не установил переменную окружения MY_DIR. Затем я делаю это:

% if [ -d $MY_DIR ]; then
>  echo WHAT?
> fi
WHAT?

Я не понимаю. Почему -d возвращает TRUE, если переменная окружения не существует?

1 Ответ

2 голосов
/ 07 октября 2019

Без кавычек разделение слов приводит к тому, что пустая строка полностью исчезает, и в результате получается команда [ -d ]. Один непустой аргумент (] игнорируется для подсчета аргументов) приводит к успеху [. [ <word> ] интерпретируется как [ -n <word> ], что проверяет, что <word> не пусто. [ -d ] читается как [ -n -d ] и всегда выполняется успешно, поскольку -d не является пустой строкой.

Используйте кавычки.

if [ -d "$MY_DIR" ]; then  # when unset, equivalent to [ -d "" ] with two arguments
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...