Условие Bash формы - [-n "$ {VAR: -x}"] оценивается, даже если установлен VAR - PullRequest
0 голосов
/ 28 мая 2009

Я написал оператор if в форме:

if [ -n "${VAR:-x}" ]; then
   #do something
   export VAR=#something
fi

Мой сценарий оболочки вызывает этот оператор дважды, и неожиданно дважды выполняет условие.

[подсказка (возможно ...): этот точный код повторяется в функции во включенном файле. Оператор if сначала оценивается до вызова функции. Он «снова» вычисляется при вызове функции.]

В чем здесь дело? Я правильно понимаю флаг -x?

Спасибо!

1 Ответ

4 голосов
/ 28 мая 2009

${VAR:-x} говорит, что если VAR не установлено, подставьте строку x, в противном случае подставьте значение VAR.

Аналогично, ${FOO:-bar} говорит, что подставьте значение FOO или строку bar, если FOO не установлено , как описано здесь .

Это означает, что -n "${VAR:-x}" всегда будет истинным, поскольку -n означает проверку, если не пусто, и "${VAR:-x}" никогда не будет пустым.

...