Готовый перевод bash Cookbook / bash: Сборник рецептов: 1.6 Using Shell Quoting / Используем кавычки

Проблема
Вам необходимо принять решение об использовании кавычек в командной строке.

Решение
Заключить строку в одинарные кавычки, если только она не содержит элементы, которые должны быть видоизменяны оболочкой.

Обсуждение
Текст не обрамленный кавычками или же текст в двойных кавычках являются для оболочки причиной для детализации и замены. Рассмотрим:

$ echo A coffee is $5?!
A coffee is ?!
$ echo "A coffee is $5?!"
-bash: !": event not found
$ echo 'A coffee is $5?!'
A coffee is $5?!

В первом примере элемент $5 был принят за переменную, но так как ее не существует он получил значение null. Это же верно и для второго примера, однако мы даже не дойдем до вывода результата, так как элемент !" трактуется как замена истории оболочки, которая возвращает ошибку потому, что он не совпадает ни с чем в истории. Третий пример работает как и ожидалось.

$ echo 'A coffee is $5 for' "$USER" '?!'
A coffee is $5 for jp ?!
$ echo "A coffee is \$5 for $USER?\!"
A coffee is $5 for jp?\!
$ echo "A coffee is \$5 for $USER?! "
A coffee is $5 for jp?!

# Мы получим продолжающееся приглашение, так как у нас появились незакрытые кавычки
$ echo '$USER won't pay $5 for coffee.'
> ^C
# НЕВЕРНО
$ echo "$USER won't pay $5 for coffee."
jp won't pay for coffee.
# Работает
$ echo "$USER won't pay \$5 for coffee."
jp won't pay $5 for coffee.
# Тоже работает
$ echo 'I won'\''t pay $5 for coffee.'
I won't pay $5 for coffee.

Смотрите также
• Глава 5 для подробностей о переменных оболочки и их синтаксиса
• Глава 18 для подробностей о ! и команд истории оболочки

Переведено на Нотабеноиде
http://notabenoid.org/book/750/3523

Переводчики: bbrodriges

Настройки

Готово:

80.00% КП = 1.0

Непереведённые фрагменты будут пропущены.