Linux Labs

Первые шаги / Ступень 14 из 15

Справка и оболочка

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 8 · на машине · 5 мин

Кавычки и шаблоны

Программа получает не совсем то, что ты набрал: $, * и кавычки Bash обрабатывает до запуска.

Прежде чем запустить команду, Bash готовит её аргументы — слова, которые получит программа. Пробел разделяет аргументы. $HOME Bash заменяет значением переменной — путём домашнего каталога. Шаблон имён *.log из урока о файлах Bash заменяет списком подходящих имён, и программа получает уже готовые имена. Кавычки меняют эту подготовку:

Как записано Что получит программа
$HOME путь домашнего каталога
"$HOME" тот же путь одним аргументом, даже с пробелами
'$HOME' текст $HOME как есть
*.log имена файлов, подходящих под шаблон
'*.log' или "*.log" текст *.log как есть

Увидеть аргументы помогает printf '%s\n': он печатает каждый аргумент на отдельной строке.

Упражнение · посмотреть

Посмотри, что получает printf

В каталоге ~/shell-lab выполни три вызова printf из списка и сравни, какие аргументы получила программа. Файлы не меняй.

Сначала предположи

Сколько строк напечатает первый вызов, printf '%s\n' *.log?

Теперь начни упражнение, выполни команду и сверь прогноз с выводом.

Войти и начать Машина доступна после входа
Проверь себя 1 вопрос

Что напечатает printf '%s\n' $HOME/my docs — без кавычек?

  • Без кавычек Bash подставляет значение $HOME. Текстом $HOME остаётся в одинарных кавычках: '$HOME'.

  • Пробел без кавычек разделяет аргументы: printf получил два слова и напечатал каждое на своей строке. Одним аргументом путь станет в кавычках: "$HOME/my docs".

  • printf печатает аргументы и файлы не открывает, ему всё равно, есть ли такой путь. Проверь: printf '%s\n' /no/such/dir.

Без кавычек Bash разделил путь по пробелу, и printf получил два аргумента: /home/student/my и docs.

Ubuntu 24.04
Загрузка…