man bash
дає це про єдине цитування
Замикання символів в одинарних лапках зберігає буквальне значення кожного символу в лапках. Одиночна цитата може не виникати між окремими цитатами, навіть якщо передує зворотна косою рисою.
Що б ви не ввели в командному рядку, bash інтерпретує його, а потім надсилає результат програмі, якій він повинен бути надісланий. У цьому випадку, якщо ви використовуєте sed 's/$old_run/$new_run/'
, bash спочатку бачить sed
, він розпізнає його як виконуваний файл, присутній у $PATH
змінній . sed
Виконуваний файл вимагає введення. Bash шукає вхід і знаходить 's/$old_run/$new_run/'
. Поодинокі цитати говорять, що баш не інтерпретувати зміст у них і передавати їх такими, якими вони є. Отже, bash потім передає їх на sed. Sed видає помилку, оскільки $
може статися лише в кінці рядка.
Замість цього, якщо ми використовуємо подвійні лапки, тобто, "s/$old_run/$new_run/"
bash бачить це і інтерпретує $old_run
як ім'я змінної та робить підміну (ця фаза називається розширенням змінної). Це дійсно те, чого ми вимагали.
Але, ви повинні бути обережними, використовуючи подвійні лапки, тому що вони інтерпретуються спочатку bash, а потім надаються sed. Отже, перед використанням їх потрібно уникати деяких символів типу `.