Я хочу извлечь соответствующее регулярное выражение из этого файла:
abc
de
{my_pattern.global} # want to extract my_pattern.global
# without curly brackets
123
и назначить его переменной в сценарии оболочки:
#!/bin/bash
l_config_file="my_file.cfg"
l_extracted_pattern=""
l_match_pattern="(?<={).+\.global(?=})"
l_my_dir=$(pwd)
echo "grep -oP '$l_match_pattern' $l_my_dir/$l_config_file"
echo "debug 1 - exit code: $?"
grep -oP '$l_match_pattern' $l_my_dir/$l_config_file
echo "debug 2 - exit code: $?"
sh -c "grep -oP '$l_match_pattern' $l_my_dir/$l_config_file"
echo "debug 3 - exit code: $?"
$l_extracted_pattern = "$(sh -c "grep -oP '$l_match_pattern' $l_my_dir/$l_config_file")"
echo "debug 4 - exit code: $?"
echo $l_extracted_pattern
Вывод:
grep -oP '(?<={).+\.global(?=})' /tmp/my_file.cfg
debug 1 - exit code: 0
debug 2 - exit code: 1
my_pattern.global
debug 3 - exit code: 0
./sto.sh: line 14: =: command not found.
debug 4 - exit code: 127
Как видите, команда grep работает хорошо (при выполнении через sh -c), но не удается при попытке присвоить вывод переменной $ l_extracted_pattern с кодом выхода 127. Это означает, что оболочка не распознает команду,Я подозреваю, что регулярное выражение - причина проблемы здесь, но не мог выяснить, что конкретно.Что не так?