У командному рядку bash лапки здаються дрібницею, але від вибору лапок залежить результат команди. Різниця між одинарними й подвійними лапками непомітна на вигляд, але вони поводяться по-різному. Коротко: одинарні лапки нічого не змінюють усередині, а подвійні підставляють значення змінних і команд. Розберемо на прикладах.
Одинарні лапки: текст як є
Усе, що написано в одинарних лапках, bash сприймає буквально. Змінні там не розкриваються.
name="Анна"
echo 'Привіт, $name'
Результат: Привіт, $name. Знак долара залишився текстом.
Подвійні лапки: змінні працюють
У подвійних лапках bash підставляє значення змінних:
name="Анна"
echo "Привіт, $name"
Результат: Привіт, Анна. Змінна — це «коробка» з іменем, у якій лежить значення; знак $ перед назвою означає «подай, що там».
Результат команди всередині тексту
У подвійних лапках працює й підстановка команди $(...): bash виконає команду та вставить її відповідь:
echo "Сьогодні $(date +%d.%m.%Y)"
echo 'Сьогодні $(date +%d.%m.%Y)'
Перша команда виведе дату, друга — рядок із $(date ...) без змін.
Коли потрібні подвійні лапки навколо змінної
Найчастіша помилка новачків — змінна з пробілами без лапок. Приклад: теку називають «Мої фото».
folder="Мої фото"
ls $folder # bash побачить два слова: Мої та фото
ls "$folder" # правильно: одне слово з пробілом
Тому правило: змінну в командах краще завжди брати в подвійні лапки.
Як вставити лапки всередину лапок
- Подвійні в подвійних: поставте перед ними зворотний слеш
\". - Одинарні в подвійних: просто пишіть, наприклад,
"It's ok". - Подвійні в одинарних: теж просто пишіть, наприклад,
'Він сказав "привіт"'.
echo "Він сказав \"привіт\""
echo "It's ok"
echo 'Він сказав "привіт"'
Що вибрати
- Потрібен точний текст без змін (регулярний вираз, рядок із
$): одинарні. - Потрібно підставити змінну або результат команди: подвійні.
- Не впевнені: спершу перевірте командою
echo, що вийде.
Поширені запитання
Чому в одинарних лапках не спрацював $HOME?
Бо одинарні лапки вимикають підстановку. Напишіть "$HOME" у подвійних лапках.
Чи можна вкласти одинарні лапки в одинарні?
Прямо ні. Обхідний шлях: закрити рядок, вставити екрановану лапку й відкрити знову, наприклад, 'It'\''s'. Зазвичай простіше взяти подвійні лапки.
Чи потрібні лапки в команді echo без змінних?
Не обов’язково, але з ними безпечніше, особливо якщо в тексті є пробіли чи спеціальні символи на кшталт * чи &.
Чим відрізняються лапки у скриптах?
Нічим: правила для скриптів і для командного рядка однакові.
Порада від Kernelka
Прийміть за звичку писати змінні як "$змінна". Тоді скрипт не зламається, коли ім’я файлу раптом міститиме пробіл.
Підсумок
- Одинарні лапки залишають текст як є, змінні не підставляються.
- Подвійні лапки підставляють змінні (
$name) і команди ($(...)). - Змінні з пробілами завжди беріть у подвійні лапки.
- Лапки одного виду всередину інших вставляйте або екрануйте слешем, або беріть лапки іншого виду.