bash 4.1.2 (2): как применить обратное сопоставление регулярных выражений в for-l oop? - PullRequest
1 голос
/ 19 апреля 2020

Я хочу l oop только через каталоги, которые НЕ содержат строку "unicredit". Учитывая этот список каталогов (находится в /tmp/scripts/bash/test/):

par_q
swx_i
swx_r
unicreditucispa_ams_b
unicreditucispa_ams_m
unicreditucispa_ber_b

Я запустил следующий однострочный:

for i in /tmp/scripts/bash/test/^((?!unicredit*).)*$; do echo FOUND $i; done

И ожидал следующий вывод:

FOUND par_q
FOUND swx_i
FOUND swx_r

Но вместо этого получил эту ошибку:

-bash: syntax error near unexpected token `('

Я попытался избежать некоторых / всех скобок с \, а также попытался заключить регулярное выражение в кавычки, но это не решило проблему.

Какие поправки я должен сделать, чтобы получить желаемый результат?

Спасибо.

1 Ответ

1 голос
/ 19 апреля 2020

Я предлагаю:

shopt -s extglob # enable extglob
for i in /tmp/scripts/bash/test/!(*unicredit*); do echo "FOUND $i"; done
...