Одинарные кавычки заключают в себе значение, которое следует понимать буквально: все типы раскрытия исключаются. Обычно используется , если значение включает или может включать пробелы (пробел, табуляция, новая строка), или специальные символы ( $
, \
, `
) , что пользователь не хочет быть расширен / обрабатывают специально оболочкой.
Двойные кавычки заключают в себе значение, которое будет иметь переменные и замену символов. Требуется, когда выходные данные могут содержать пробелы, и должны быть назначены как одно значение.
Обратные кавычки заключают в себе команду, результаты которой требуются в качестве значения. Новые оболочки позволяют использовать $(...)
вместо `...`
. Я предпочитаю более новый метод.
Следующий код может помочь понять, что происходит.
CMD = 'ls.'
echo sq: $ CMD
установить $ CMD
эхо необработанное 1: $ 1
echo raw: $ *
установить "$ CMD"
echo dq: $ 1
echo bq: `$ CMD`
echo new: $ ($ CMD)
\
всегда трактуется буквально, когда заключено в одинарные кавычки, даже если оно предшествует'
. После открытия'
следующее'
всегда интерпретируется как заключительная цитата. Нечто подобное'
заключению в кавычки в строке, заключенной в одинарные кавычки, может быть достигнуто путем завершения кавычек, экранирования по'
отдельности и повторного цитирования. То есть, хотя\'
не работает между открывающими и закрывающими'
символами,'\''
работает. (См Жиля «сек поправки к одному из моих постов , когда я сделал ту же ошибку для деталей.)