User Tools

Site Tools


bash:подстановка

Bash Подстановка

Подстановка путей

Механизм работы групповых символов называется подстановкой пути (pathname expansion).

Допустим, содержимое домашней директории выглядит вот так:

ls
Out.txt                       nginx-1.19.0         openssl-1.1.1g.tar.gz  pcre-8.44.tar.gz  zlib-1.2.11.tar.gz
bootstrap-5.0.0-examples.zip  nginx-1.19.0.tar.gz  out_bash               v4.0.0.zip
fot_test                      node_modules         package-lock.json      years
in                            openssl-1.1.1g       pcre-8.44              zlib-1.2.11

Выполнить следующую подстановку:

echo n*
nginx-1.19.0 nginx-1.19.0.tar.gz node_modules

Либо

echo *s
node_modules years

Либо так

echo [[:upper:]]*
Out.txt

Посмотрим за пределы домашнего каталога

echo /usr/*/share
/usr/local/share

Подстановка путей для скрытых файлов

Файлы с именами, начинающимися с точки, считаются скрытыми. Механизм подстановки пути также учитывает это. Подстановка, такая как

echo *

Не покажет скрытые файлы.

На первый взгляд кажется, что можно было бы включить скрытые файлы в подстановку, добавив в начало шаблона точку, например:

echo .*
. .. .bash_history .bashrc .config

Такой подход даст желаемое. Однако, если внимательно исследовать результаты, можно заметить, что в них также присутствуют имена <html>.</html> (точка) и <html>..</html> (две точки). Так как эти имена соответствуют текущему рабочему каталогу и родительскому каталогу, применение такого шаблона может привести к неправильным результатам. В этом можно убедится выполнив следующею команду

ls -d .* | less

Чтобы обеспечить правильную подстановку пути в такой ситуации, следует использовать специализированный шаблон. Следующий шаблон действует правильно:

ls -d .[!.]?*

Подстановка тильды

Если тильда используется в начале слова, то замещается именем домашнего каталога указанного пользователя или, если пользователь не указан, именем домашнего каталога текущего пользователя:

echo ~
/home/username

Если в системе существует учетная запись пользователя johndoe, тогда

me@linuxbox ~]$ echo ~johndoe
/home/johndoe

Подстановка фигурных скобок

Шаблоны с фигурными скобками могут содержать начальную часть, которая называется преамбулой, и заключительную часть, которая называется эпилогом.

Внутри фигурных скобок находится список строк, разделенных запятыми, или диапазон целых чисел или одиночных символов. Использование пробелов внутри фигурных скобок не допускается. Ниже приводится пример с использованием диапазона целых чисел:

echo Number_{1..3}
Number_1 Number_2 Number_3

C версии bash 4.0 и выше целые числа можно дополнять ведущими нулями, например:

echo Number_{01..3}
Number_01 Number_02 Number_03
 
echo Number_{0001..3}
Number_0001 Number_0002 Number_0003

В данном примере используется диапазон символов в обратном порядке:

echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

Пример, как это может пригодиться в реальной жизни. Создадим группу директорий с именами, состоящими из номера года и месяца

mkdir {2020..2021}-{1..12}
 
ls
2020-1   2020-11  2020-2  2020-4  2020-6  2020-8  2021-1   2021-11  2021-2  2021-4  2021-6  2021-8
2020-10  2020-12  2020-3  2020-5  2020-7  2020-9  2021-10  2021-12  2021-3  2021-5  2021-7  2021-9

Перемещение файла

touch day_30.05.txt
mv -v day_30.05{,.21}.txt
renamed 'day_30.05.txt' -> 'day_30.05.21.txt'

Подстановка результатов арифметических выражений

Командная оболочка поддерживает также подстановку результатов арифметических выражений. Это позволяет использовать командную строку как калькулятор:

echo $((2+2))
4

Для подстановки арифметических выражений используется следующий формат – <html>$1)</html>. Где выражение – это арифметическое выражение, состоящее из значений и арифметических операторов.

Механизм подстановки арифметических выражений позволяет использовать только целые (невещественные) числа.

Оператор Описание
<html>+</html> Сложение
<html>-</html> Вычитание
<html>*</html> Умножение
<html>/</html> Деление (но, из-за того, что подстановка поддерживает только целочисленную арифметику, результатом будет целое число)
<html>%</html> Деление по модулю или остаток от деления
1)
выражение
bash/подстановка.txt · Last modified: 2023/04/06 10:18 (external edit)