Если вы уверены, что значение переменной - это одно слово (без пробелов), тогда можно использовать $varname
или ${varname}
. Если вы не можете гарантировать это, вы должны использовать "$varname"
или "${varname}"
. Обратите внимание, что bash выполняет разбиение слов перед интерпретацией вашей команды, поэтому вы можете получить синтаксическую ошибку, если не заключите в кавычки выражение, например
C="white space"
if [ -z $C ]
then
...
fi
приведет к синтаксической ошибке:
-bash: [: white: binary operator expected
пока все работает нормально:
C="white space"
if [ -z "$C" ]
then
...
fi
Это связано с тем, что после раскрытия переменной в первом случае без кавычек bash видит следующее:
if [ -z white space ]
then
...
fi
и оператор -z
ожидает только один, а не два аргумента. Во втором цитируемом случае bash видит это:
if [ -z "white space" ]
then
...
fi
т.е. только один аргумент, как требуется. Обратите внимание, что в назначении были использованы кавычки
C="white space"
, поскольку это также приведет к ошибке, если вы напишите
C=white space
, поскольку это будет означать: выполнить команду space
со средой, содержащей добавленную переменную C=white
.
Итак, в общем случае вы должны заключать эти выражения в кавычки, чтобы ваш код был более устойчивым к непредвиденным значениям переменных. Это особенно верно, если значение переменной берется из входных данных, файла и т. Д. Обычно безопасно отбрасывать кавычки для целочисленных переменных или когда вы просто хотите отобразить значение переменной, как в echo $C
.