Перейти на домашнюю страницу

bash, Метасимволы задания имён файлов * , ? , конструкции (...) , [...] и [[:class:]]

Источник: Bash Pocket Reference by Arnold Robbins

Данные метасимволы можно использовать в ls, find и т.д.

* Match any string of zero or more characters.
? Match any single character.
[abc ... ] Match any one of the enclosed characters; a hyphen can specify a range (e.g., a-z , A-Z , 0-9 ).
[!abc ... ] Match any character not enclosed as above.


В конструкции [..] можно использовать диапазоны, например [0-9,a-z], но делать это не рекомендуется, так как системная локаль может содержать дополнительные символы между указанными и введённая команда может начать работать непредсказуемо.

* * *

POSIX-возможности

Поддерживается стандарт:

[[:class:]]


Данная конструкция означает один символ типа class.

Где class может быть:

alnum, alpha, ascii, blank, cntrl, digit, graph, lower, print, punct, space, upper, word


Пример использования:

# ls /etc/rc[[:digit:]].d/


* * *

Расширенный синтаксис, используя опцию extglob

Для включения опции в начале скрипта надо разместить команду:

shopt -s extglob


После этого становятся доступны конструкции:

?(pattern) Match zero or one instance of pattern.
*(pattern) Match zero or more instances of pattern.
+(pattern) Match one or more instances of pattern.
@(pattern) Match exactly one instance of pattern.
!(pattern) Match any strings that don’t match pattern.


Где паттерн это набор символов, разделённых знаком |
Также вместо символа может быть использована POSIX-конструкция [[:class:]]

В сочетании с POSIX-возможностями этот расширенный синтаксис полезный инструмент, который в простых случаях поможет обойтись без регулярных выражений.

#bash

2019-08-20 22:14:10