Вы можете сделать это с помощью расширенной опции glob, которая позволит вам расширять подстановочные знаки внутри переменной с помощью*()
shopt -s extglob
dir_array=(
"/srv/*(*)/folderA"
"/srv/level1D/*(*)/folderA"
)
Расширение произойдет в для d in... , что, я думаю, является правильным моментом.
Превращение комментариев в ответ:
Проблема в том, что \
является escape-символом как для регулярных выражений, так и для оболочки. \.
относится к оболочке так же, как '.'
. echo
и set -x
помогают понять, что делает оболочка:
> echo \.
.
> echo '\.'
\.
> echo \\.
\.
> set -x
> echo 9_00 | grep 9\.00
+ echo 9_00
+ grep 9.00
9_00
Таким образом, если команда должна видеть \
, она должна быть защищена кавычками или вторым \
.
Чтобы добавить к другому ответу и комментариям, еще одна вещь, которую вы можете сделать, чтобы заставить grep
вернуть то, что вы хотите, это использовать следующее:
grep -F 9.00 small.txt
Выход:
9.00
-F
заставляет grep
видеть шаблон как фиксированную строку, а не как регулярное выражение, так что он будет возвращать только строки с этой точной строкой. Из-за этого вам даже не нужно экранировать .
или использовать кавычки, потому что он будет точно соответствовать только 9.00
вместо того, чтобы видеть .
как любой символ.
Why do I have to quote an escaped character in a regular expression for grep, but not on online regex engines?
Вы не должны заключать его в кавычки для grep , но для оболочки.
Использование grep -f
для чтения шаблона из файла показывает, что шаблон 9\.00
, который вы показали, работает нормально, если он не проходит через оболочку.
$ cat re.txt
9\.00
$ grep -f re.txt small.txt
9.00
Тот факт, что проблема grep
не в себе, вероятно, является причиной того, что вы не видите ее в статьях о регулярных выражениях. Вы могли бы увидеть соответствующие пункты в статье о том, как работает оболочка...
I know that there are differences between engines at the advanced level
Даже не обязательно слишком продвинутый. Что-то вроде +
уже работает по-разному в BRE и ERE. Также, по крайней мере, некоторые онлайн-инструменты по умолчанию используют регулярные выражения Perl или аналогичные, которые имеют много функций, отсутствующих в стандартных регулярных выражениях.
См.: