Практическое задание

Эта задача — шаг 10 курса «Bash: подстановки, массивы и кавычки»

Кавычки спасают звёздочку

средне~5 мин

Скрипт /root/banner.sh должен печатать свой первый аргумент между маркерами === дословно: bash /root/banner.sh 'a b' → === a b ===, bash /root/banner.sh '*' → === * ===. Сейчас он схлопывает пробелы, а звёздочку и вовсе превращает в список файлов текущего каталога. Почини скрипт. Открой скрипт во вкладке «Редактор» над терминалом.

Что потренируешь:
  • кавычки
  • word splitting
  • globbing
  • подстановка параметров

Разбор темы

После подстановки переменной без кавычек bash делает с результатом ещё два шага: разбиение на слова по пробелам (повторы схлопываются) и раскрытие шаблонов имён файлов — *, ? и […] превращаются в список подходящих файлов текущего каталога. Отсюда два бага в одной строке: a b печатается как a b, а * — как перечень файлов. Двойные кавычки отключают оба шага, оставляя саму подстановку: значение уходит одним аргументом символ в символ. Поэтому правило простое — подстановку берут в двойные кавычки всегда, когда не нужно обратное.

Что проверяется

  1. пробелы внутри аргумента сохранены
  2. звёздочка не раскрывается в имена файлов
  3. обычный аргумент печатается между маркерами

Как это выглядит