Какую форму предпочтительнее использовать в Bash?
Я учусь Bash, и я вижу, что форма
С = пример
эхо "$C"
дать тот же результат в форме
С ="Пример"
эхо $ C
Я хотел бы знать, лучше ли ставить "" в присваивании переменной или после $. Или если это безразлично. или если один считается "красивее", чем другой.
5 ответов
Если вы уверены, что значение переменной - это одно слово (без пробелов), тогда можно использовать $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
,
Имеет значение, когда строка содержит пробельные символы. Без кавычек пробельные символы рассматриваются как разделители токенов, а bash пытается интерпретировать замещенную строку как выражение.
Всегда ставьте кавычки в безопасное место, когда вы не собираетесь оценивать переменную как часть выражения.
Представьте, что вы изменили ввод с "примера" на "два слова", тогда вы можете столкнуться со странным поведением или даже синтаксическими ошибками при выполнении скрипта, если вы пропустили вышеизложенное.
Другими словами,
C="abc def"
# the echo command receives one argument: "abc def"
echo "$C"
# echo receives two arguments: "abc" and "def"
echo $C
# bash tries to execute the program "abc" with a first argument "def"
$C
# bash tries to execute the program "abc def"
"$C"
Хорошая документация о кавычках и разделении слов:
"ИСПОЛЬЗУЙТЕ БОЛЬШЕ ЦИТАТ!" Они жизненно важны. Кроме того, узнайте разницу между '
а также "
и `. Смотрите http://mywiki.wooledge.org/Quotes и http://wiki.bash-hackers.org/syntax/words
образец greybot из IRC freenode #bash говорит с миром =)
Если это константа, состоящая из одного слова, это не имеет значения.
Тем не менее, вы должны прочитать о двух видах цитирования. Попробуйте эту статью и эту документацию. Есть также так вопрос.
Попробуйте на реальном примере с пробелами. Для строки example
вам не нужно никаких цитат вообще. Итак, создайте файл с именем This is an example.txt
и затем повторите попытку. Замена echo
с ls
...