Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spo_voprosy.docx
Скачиваний:
9
Добавлен:
20.03.2016
Размер:
465.35 Кб
Скачать

14. File globbing

Shell также ответственен за файл подстановки (или динамическую генерацию файла (filename)). Эта глава объяснит файл подстановки (file globbing)

  1. * - звездочка. С помощью shell интерпретируется как знак для генерации имен файлов, при этом звездочке ставится в соответствие любая комбинация символов (даже их отсутствие). Когда путь не задан, shell использует имена файлов в текущей директории. Для большей информации посмотрите мануал для glob(7).

[paul@RHELv4u3 gen]$ ls

file1 file2 file3 File4 File55 FileA fileab Fileab FileAB fileabc

[paul@RHELv4u3 gen]$ ls File*

File4 File55 FileA Fileab FileAB

[paul@RHELv4u3 gen]$ ls file*

file1 file2 file3 fileab fileabc

[paul@RHELv4u3 gen]$ ls *ile55

File55

[paul@RHELv4u3 gen]$ ls F*ile55

File55

[paul@RHELv4u3 gen]$ ls F*55

File55

[paul@RHELv4u3 gen]$

  1. ? - Знак вопроса. Аналогично звездочке, интерпретируется как точно один символ.

[paul@RHELv4u3 gen]$ ls

file1 file2 file3 File4 File55 FileA fileab Fileab FileAB fileabc

[paul@RHELv4u3 gen]$ ls File?

File4 FileA

[paul@RHELv4u3 gen]$ ls Fil?4

File4

[paul@RHELv4u3 gen]$ ls Fil??

File4 FileA

[paul@RHELv4u3 gen]$ ls File??

File55 Fileab FileAB

[paul@RHELv4u3 gen]$

  1. [] – квадратные скобки. Ищется совпадение с каким-либо символом, заключенным в квадратных скобках. Порядок символов при этом не важен. Каждая пара скобок интерпретируется точно как один символ.

[paul@RHELv4u3 gen]$ ls

file1 file2 file3 File4 File55 FileA fileab Fileab FileAB fileabc

[paul@RHELv4u3 gen]$ ls File[5A]

FileA

[paul@RHELv4u3 gen]$ ls File[A5]

FileA

[paul@RHELv4u3 gen]$ ls File[A5][5b]

File55

[paul@RHELv4u3 gen]$ ls File[a5][5b]

File55 Fileab

[paul@RHELv4u3 gen]$ ls File[a5][5b][abcdefghijklm]

ls: File[a5][5b][abcdefghijklm]: No such file or directory

[paul@RHELv4u3 gen]$ ls file[a5][5b][abcdefghijklm]

fileabc

[paul@RHELv4u3 gen]$

Вы также можете исключать символы из списка между квадратными скобками с помощью восклицательного знака. И вы вправе делать комбинации этих «диких карт» (wild cards).

[paul@RHELv4u3 gen]$ ls

file1 file2 file3 File4 File55 FileA fileab Fileab FileAB fileabc

[paul@RHELv4u3 gen]$ ls file[a5][!Z]

fileab

[paul@RHELv4u3 gen]$ ls file[!5]*

file1 file2 file3 fileab fileabc

[paul@RHELv4u3 gen]$ ls file[!5]?

fileab

[paul@RHELv4u3 gen]$

  1. Диапазоны a-z и 0-9

Bash Shell также в состоянии понять диапазоны символов в скобках.

[paul@RHELv4u3 gen]$ ls

file1 file3 File55 fileab FileAB fileabc

file2 File4 FileA Fileab fileab2

[paul@RHELv4u3 gen]$ ls file[a-z]*

fileab fileab2 fileabc

[paul@RHELv4u3 gen]$ ls file[0-9]

file1 file2 file3

[paul@RHELv4u3 gen]$ ls file[a-z][a-z][0-9]*

fileab2

[paul@RHELv4u3 gen]$

  1. $LANG и квадратные скобки.

Не стоит забывать о действии переменной LANG. Некоторые языки включают прописные буквы в диапазон заглавных (и наоборот).

paul@RHELv4u4:~/test$ ls [A-Z]ile?

file1 file2 file3 File4

paul@RHELv4u4:~/test$ ls [a-z]ile?

file1 file2 file3 File4

paul@RHELv4u4:~/test$ echo $LANG

en_US.UTF-8

paul@RHELv4u4:~/test$ LANG=C

paul@RHELv4u4:~/test$ echo $LANG

C

paul@RHELv4u4:~/test$ ls [a-z]ile?

file1 file2 file3

paul@RHELv4u4:~/test$ ls [A-Z]ile?

File4

paul@RHELv4u4:~/test$

  1. Предотвращение файла подстановки.

Следующий пример не должен стать сюрпризом. echo * вернет * когда команда была дана в пустой папке. И она вернет имена всех файлов в папке, если папка не была пустой.

paul@ubu1010:~$ mkdir test42

paul@ubu1010:~$ cd test42

paul@ubu1010:~/test42$ echo *

*

paul@ubu1010:~/test42$ touch file42 file33

paul@ubu1010:~/test42$ echo *

file33 file42

Подстановка может быть предотвращена использованием кавычек или обратного слеша, как показано на примере.

paul@ubu1010:~/test42$ echo *

file33 file42

paul@ubu1010:~/test42$ echo \*

*

paul@ubu1010:~/test42$ echo '*'

*

paul@ubu1010:~/test42$ echo "*"

*

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]