объединение переменных внутри команд Linux в Perl - PullRequest
0 голосов
/ 24 января 2019

Мне нужно использовать системную команду (grep), в которой переменная объединена со строкой в ​​качестве регулярного выражения для поиска файла.Можно ли объединить регулярное выражение для grep между переменной и строкой в ​​Perl ??

Я пытался использовать оператор ., но он не работает.

if(`grep -e "$fubname._early_exit_indicator = 1" $golden_path/early_exit_information.tsv`){
    print "-D- The golden data indicates early exit should occur\n";
    $golden_early_exit_indicator=1;
}

Ожидается совпадение с регулярным выражением, "$fubname._early_exit_indicator = 1", но оно не соответствует требуемому.Ожидаемый результат должен быть: -D- The golden data indicates early exit should occur Но в настоящем коде он не печатает это.

Выходная ссылка: (https://drive.google.com/open?id=1N0SaZ-r3bYPlljKUgTOH5AbxCAaHw7zD)

Ответы [ 2 ]

0 голосов
/ 24 января 2019

.Оператор не будет работать внутри кавычек.используйте что-то вроде этого -

if (`grep -e" $ {fubname} _early_exit_indicator = 1 "...

Надеюсь, это сработает

0 голосов
/ 24 января 2019

Проблема в том, что оператор . не распознается как оператор внутри кавычек.Точечные операторы используют между строками, а не внутри строками.Используя точку внутри строки, вставляем ее буквально.Эта буквальная точка в шаблоне приводит к сбою команды grep в вашем коде.

Также обратите внимание, что внутри кавычек Perl пытается интерполировать переменную, используя определенные правила синтаксического анализа идентификатора.См. perldoc perlop для различных типов цитирования, которые используются в Perl, и смотрите perldoc perldata для получения информации о правилах синтаксического анализа идентификатора.

В итоге,чтобы интерполировать переменную $fubname в аргументе backticks, используйте

"${fubname}_early_exit_indicator = 1"

. Обратите внимание, что нам нужны фигурные скобки вокруг идентификатора, поскольку следующее подчеркивание является допустимым символом идентификатора.(Напротив, буквальная точка не является допустимым символом идентификатора, поэтому, если следующий символ был буквальной точкой, вам не нужны скобки вокруг идентификатора.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...