bash 4.1.2(2): как применить обратное сопоставление регулярных выражений в цикле for?

Я хочу перебрать только те каталоги, которые НЕ содержат строку 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 ответ

Решение

Я предлагаю:

shopt -s extglob # enable extglob
for i in /tmp/scripts/bash/test/!(*unicredit*); do echo "FOUND $i"; done
Другие вопросы по тегам