В большинстве случаев цитирование строки, в которой нет пробелов или специальных символов, строго эквивалентно тому, чтобы вообще не заключать в кавычки.
Однако в некоторых случаях цитирование имеет значение.
Предотвращение псевдонима
Во многих linux дистрибутивах автоматически устанавливаются псевдонимы для таких программ, как ls
или grep
, например:
alias ls='ls --color=auto'
alias grep='grep --color=auto'
Если вы вызываете указанную команду, псевдоним не будет быть расширен:
ls / # shows the root files and folders with colors
'ls' / # shows the root files and folders without any color
Псевдоним не используется, даже если команда частично заключена в кавычки:
'l's / # shows the root files and folders without any color
(я бы настоятельно рекомендовал не делать этого, хотя )
Зарезервированные ключевые слова
Некоторые ключевые слова не должны быть в кавычках. Например, это будет работать:
time cat $myfile
Но это не удастся:
'time' cat $myfile
- bash: время : команда не найдена
Расширение тильды
Символ тильды ~
может использоваться для доступа к домашнему каталогу. В одиночку он указывает на домашний каталог текущего пользователя:
ls ~
Когда непосредственно следует имя пользователя, он указывает на домашний каталог этого пользователя:
ls ~root
При цитировании символа тильды каталог не раскрывается, и оболочка пытается найти вместо него файл, содержащий символ тильды:
ls '~'
ls: невозможно получить доступ ~: нет такого файла или каталога
Тесты
Оператор [[ ]]
может использовать команды test
, такие как -f
, -e
и др. c. Однако директива не должна быть заключена в кавычки.
[[ -e /tmp ]] && echo /tmp exists || echo /tmp is missing
/ tmp существует
[[ '-e' /tmp ]] && echo /tmp exists || echo /tmp is missing
- bash: ожидается условный двоичный оператор
- bash: синтаксическая ошибка около `/ tmp '
Заключение
Во многих случаях цитирование выполняется Сделать разницу. Я думаю, что первая ситуация - причина, по которой ваш автор написал код.
PS. этот список не является исчерпывающим, особенно я пропустил такие случаи, как пробелы, звездочки, трубы, амперсанды и т. д. c. потому что я предполагаю, что вы уже знаете, почему кто-то хотел бы процитировать их.