Чим відрізняються одинарні й подвійні лапки в bash

Чим відрізняються одинарні й подвійні лапки в bash
Категорії: Скрипти та автоматизація

У командному рядку 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) і команди ($(...)).
  • Змінні з пробілами завжди беріть у подвійні лапки.
  • Лапки одного виду всередину інших вставляйте або екрануйте слешем, або беріть лапки іншого виду.

Прокоментувати

На сайті відображається лише твоє ім'я та коментар. Електронна пошта використовується виключно для зв'язку з тобою за потреби.