А вы задумывались когда-нибудь над тем, что происходит когда вы вводите ту или иную команду. Давайте сегодня об этом поговорим.
Каждый раз, когда вы вводите команду и нажимаете клавишу Enter, система выполняет несколько операций с текстом, прежде чем выполнить вашу команду. Вот весь процесс с этими операциями и называется подстановкой. Например вы вводите команду cp, система сначала меняет на самом деле, простой вызов команды на /usr/bin/cp. А потом еще бывает и по параметрам проходится.
Чтобы поближе с этим познакомиться, давайте примем в обиход команду echo. Это несложная команда, задачей которой является выводить на экран свои аргументы.
$echo some text
some text
Как видите все просто. Так, а давайте выведем *.
$echo *
Desktop Documents Music Pictures Public Templates Videos
Опаньки! Что-то не так. Мы же хотели *, а получили список директорий в текущем каталоге. На самом деле оболочка замещает символ * чем-то другим. В данном случае именами файлов в текущем каталоге. И команда echo не видит символ *, она видит то, что оболочка подставила вместо *. Примерно так и работает подстановка.
Давайте рассмотрим какие подстановки бывают еще.
Символ ~, тоже имеет специальное значение. Он замещается именем домашнего каталога
$echo ~
/home/user
Еще можно подставлять результаты математических выражений. Для этого используется такой формат $((выражение)). Например
$ echo $((2+2))
4
Использовать можно только целые числа и следующие операторы
+ сложение
- вычитание
* умножение
/ деление
% остаток от деления
** возведение в степень
Еще есть вариант подстановки фигурных скобок. С помощью этого приема создается много строк по заданному шаблону. Например
$echo Номер_{1..4}
Номер_1 Номер_2 Номер_3 Номер_4
Или так
$echo {a..e}
a b c d e
Так же в системе есть переменные, подстановка, которых работает в терминальной оболочке.
$echo $USER
Выведет на экран значение этой переменной, а не $USER. Список всех переменных в системе можно посмотреть, использовав команду
$ printenv
Еще можно выполнять подстановку команд. Это когда вместо ее значения подставляется результат ее выполнения. Например
$ ls -l $(which cp)
-rwxr-xr-x 1 root root 151168 Sep 24 2020 /usr/bin/cp
Заключение.
Итак, сегодня познакомились с таким понятием, как подстановка значений. Эти знания помогают немного понять, что происходит, когда вы вводите какие-то параметры для команды, а результат оказывается неожиданным. Плюс дает понимание того, что происходит при вызове команд. Дальше поговорим о том, как же заставить терминальную оболочку выводить то, что мы хотим. Подписывайтесь и не пропускайте мои статьи.