man bash
дает это о одиночном цитировании
Заключение символов в одинарные кавычки сохраняет буквальное значение каждого символа в кавычках. Одиночная кавычка может отсутствовать между одинарными кавычками, даже если ей предшествует обратный слеш
Что бы вы ни вводили в командной строке, bash интерпретирует его, а затем отправляет результат в программу, которой он должен быть отправлен. В этом случае, если вы используете sed 's/$old_run/$new_run/'
, bash сначала видит sed
, он распознает его как исполняемый файл, присутствующий в $PATH
переменной. , sed
Исполняемый файл требует ввода. Bash ищет вход и находит 's/$old_run/$new_run/'
. В одинарных кавычках говорится, что bash не интерпретирует содержимое и передает их такими, какие они есть. Итак, bash затем передает их в sed. Sed выдает ошибку, потому что $
может произойти только в конце строки.
Вместо этого, если мы используем двойные кавычки, т. Е., "s/$old_run/$new_run/"
Тогда bash видит это и интерпретирует $old_run
как имя переменной и производит подстановку (эта фаза называется расширением переменной). Это действительно то, что нам нужно.
Но вы должны быть осторожны, используя двойные кавычки, потому что они сначала интерпретируются bash, а затем передаются sed. Таким образом, некоторые символы, такие как `, должны быть экранированы перед их использованием.