BASH - присвоение переменной через subshell и grep - PullRequest
0 голосов
/ 27 июня 2019

Я хочу извлечь соответствующее регулярное выражение из этого файла:

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. Это означает, что оболочка не распознает команду,Я подозреваю, что регулярное выражение - причина проблемы здесь, но не мог выяснить, что конкретно.Что не так?

1 Ответ

0 голосов
/ 27 июня 2019

Даже если я уже назначил это:

l_extracted_pattern=""

и позже попытался перезаписать:

$l_extracted_pattern = "$(sh -c "grep -oP '$l_match_pattern' $l_my_dir/$l_config_file")"

Это была ошибка. Очевидно, что no присваивание переменной в bash может содержать $ перед именем переменной - даже не при создании экземпляра уже ранее. Изменено это на:

l_extracted_pattern = "$(sh -c "grep -oP '$l_match_pattern' $l_my_dir/$l_config_file")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...