Ответ вслух Junior Bash-скрипты обновлено

Кавычки в bash

Вопрос

Объясни разницу между одинарными, двойными кавычками и их отсутствием в bash.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В одинарных кавычках bash ничего не трогает: '$HOME' останется как есть. В двойных работают подстановки переменных и команд, но результат остаётся одним словом: не режется по пробелам и маски в нём не раскрываются.

Что должно прозвучать в ответе

  • Одинарные: всё буквально, никаких подстановок

  • Двойные: работают `$var`, `$(cmd)`, `\`, но нет разбиения на слова и раскрытия масок

  • Без кавычек: подстановка, затем разбиение по IFS и раскрытие `*`, `?`

  • Поэтому переменные почти всегда пишут в двойных кавычках

  • `"$@"` сохраняет аргументы по отдельности, `"$*"` склеивает в одну строку

Что могут спросить следом

  • Как вставить одинарную кавычку внутрь одинарных?
  • Когда кавычки вокруг переменной не нужны?

Разбор

В одинарных кавычках bash ничего не трогает: '$HOME' останется как есть. В двойных работают подстановки переменных и команд, но результат остаётся одним словом: не режется по пробелам и маски в нём не раскрываются. Без кавычек после подстановки идёт разбиение по IFS и раскрытие масок, поэтому файл my report.txt превращается в два аргумента, а значение * в список файлов. Отсюда правило: переменные почти всегда в двойных кавычках. Исключения редкие: внутри [[ ]] и в присваивании a=$b разбиения нет. Для аргументов важен "$@": он раскрывается в исходные аргументы по отдельности, а "$*" склеивает всё в одну строку. Одинарную кавычку внутрь одинарных вставляют так: закрыть, экранировать, открыть, 'it'\''s', или через $'...'.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.