Если вы используете оболочку, которая выполняет простую подстановку , а переменная SHELL_VAR
не существует (или является пустой), то вам нужно следить за крайними случаями. Произойдут следующие переводы:
if test $SHELL_VAR = yes; then --> if test = yes; then
if test x$SHELL_VAR = xyes; then --> if test x = xyes; then
Первый из них вызовет ошибку, поскольку первый аргумент test
пропал. Второй не имеет этой проблемы.
Ваш случай переводится следующим образом:
if test "x$SHELL_VAR" = "xyes"; then --> if test "x" = "xyes"; then
Это может показаться немного избыточным, так как в нем есть и кавычки, и "x", но оно также будет обрабатывать переменную с пробелами в нем, не задавая это в качестве двух аргументов на команду test
.
Другая причина (кроме пустых переменных) связана с обработкой опций. Если вы напишите:
if test "$1" = "abc" ; then ...
и $1
имеет значение -n
или -z
или любые другие допустимые параметры для команды test
, синтаксис неоднозначен. x
на передней панели предотвращает возможность выбора передней черты в качестве опции test
.
Имейте в виду, что это зависит от оболочки. Некоторые оболочки (на мой взгляд, csh
) будут горько жаловаться, если переменная окружения не существует, а просто возвращает пустую строку).