ОБОЛОЧКА: Как использовать оператор или при определении строки - PullRequest
0 голосов
/ 18 февраля 2011

Это может быть даже невозможно, но я пишу свой первый скрипт оболочки, и мне нужно использовать оператор типа regexp в моей строке (показано ниже)

FILES=tif2/name(45|79)*.pdf

Возможно ли это? Или мне просто нужно иметь две строки.

FILES=tif2/name45*.pdf
FILES=tif2/name79*.pdf

Ответы [ 4 ]

1 голос
/ 18 февраля 2011

В Bash, zsh, pdksh и ksh93 вы можете использовать расширенную глобализацию:

shopt -s extglob   # Bash
setopt KSH_GLOB    # zsh
FILES=tif2/name@(45|79)*.pdf

Оператор @() соответствует одному из шаблонов, внутри которого разделены символами канала.

1 голос
/ 18 февраля 2011

Альтернативы в синтаксисе глобализации оболочки используют разделенный запятыми список, заключенный в точку с запятой. Ваш пример становится:

FILES=tif2/name{45,79}*.pdf

Здесь есть довольно хорошая быстрая ссылка на синтаксис glob, поддерживаемый большинством оболочек.

Более точный синтаксис глобуса, специфичный для bash, см. http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

0 голосов
/ 18 февраля 2011

Если вы хотите, чтобы оболочка игнорировала любые специальные символы в строке, заключите ее в одинарные кавычки.

FILES='tif2/name(45|79)*.pdf'

0 голосов
/ 18 февраля 2011

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

FILES=`ls tif2/name[0-9][0-9]*.pdf|egrep "name(45|79)" | tr "\012" " "`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...