Найти в Дзене

Liunux. Подстановка.

А вы задумывались когда-нибудь над тем, что происходит когда вы вводите ту или иную команду. Давайте сегодня об этом поговорим.

Каждый раз, когда вы вводите команду и нажимаете клавишу 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

Заключение.

Итак, сегодня познакомились с таким понятием, как подстановка значений. Эти знания помогают немного понять, что происходит, когда вы вводите какие-то параметры для команды, а результат оказывается неожиданным. Плюс дает понимание того, что происходит при вызове команд. Дальше поговорим о том, как же заставить терминальную оболочку выводить то, что мы хотим. Подписывайтесь и не пропускайте мои статьи.