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