Если вы пишете сценарии оболочки, важная привычка всегда ставит двойные кавычки вокруг переменных подстановок. То есть, всегда пишут "$myvariable"
(аналогично «$ (МояКоманда)»), никогда не простой
$myvariable
или
$(mycommand)
, если вы не понимаете, почему именно вам нужно оставить их. (Опять же, вопрос не в том, «следует ли использовать кавычки?», «Почему я хочу опустить кавычки?»)
Причина в том, что оболочка делает неприятные вещи, когда вы оставляете переменную подстановкой без кавычек. (Эти неприятные вещи называются разбиением полей и расширением пути. Они хороши в некоторых ситуациях, но почти никогда не являются результатом замены переменной или команды.)
Если вы не укажете кавычки, ваш скрипт может появиться работа на первый взгляд. Это связано с тем, что неприятные вещи происходят только в том случае, если значение переменной содержит некоторые специальные символы (пробелы, \
, *
, ?
и [
). Этот вид скрытой ошибки обычно обнаруживается в день создания файла, чье имя содержит пробел, и ваш скрипт заканчивается удалением вашего исходного дерева/тезисов/изображений ребенка/...
Так, например, если у вас есть переменная $filename
, которая содержит имя файла, который вы хотите передать в команду, всегда писать
mycommand "$filename"
и не
mycommand $filename
.
Это должно быть отмечено Community Wiki. – Borealid