在perl的linux命令中串联变量

时间:2019-01-24 05:51:00

标签: linux perl unix

我需要使用系统命令(grep),该命令具有与字符串串联的变量作为正则表达式来搜索文件。 是否可以在Perl中的变量和字符串之间连接grep的正则表达式?

我尝试使用.运算符,但不起作用。

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 :(得分:1)

问题在于.运算符未被识别为引号内的运算符。点运算符使用 字符串之间,而不是 inside 字符串。使用字符串中的点将其按字面意义插入。模式中的该文字点会导致代码中的grep命令失败。

还要注意,在引号内,Perl尝试使用某些标识符解析规则对变量进行插值。 有关Perl中使用的不同类型的引用,请参见perldoc perlop,有关标识符解析规则的信息请参见perldoc perldata

总而言之,为了在backticks参数中插值变量$fubname,请使用

"${fubname}_early_exit_indicator = 1"

请注意,由于下面的下划线是有效的标识符字符,因此需要在标识符周围加上大括号。 (相反,文字点不是有效的标识符字符,因此,如果后面的字符是文字​​点,则不需要在标识符周围使用花括号。)

答案 1 :(得分:-1)

。运算符将无法在引号内工作。使用这样的东西-

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

我希望这行得通