我需要使用系统命令(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- 黄金数据表明应该提前退出
但在当前的代码中,它不会打印此内容。
输出链接:( https://drive.google.com/open?id=1N0SaZ-r3bYPlljKUgTOH5AbxCAaHw7zD )
最佳答案
问题是 .
运算符未被识别为引号内的运算符。点运算符在字符串之间使用,而不是在字符串内部使用。使用字符串内的点按字面意思插入。模式中的这个文字点会导致代码中的 grep
命令失败。
另请注意,在引号内,Perl 尝试使用某些标识符解析规则来插入变量。
请参阅perldoc perlop
有关 Perl 中使用的不同类型的引用,请参阅 perldoc perldata
有关标识符解析规则的信息。
总之,为了在反引号参数中插入变量 $fubname
,请使用
"${fubname}_early_exit_indicator = 1"
请注意,我们需要将标识符括起来,因为下面的下划线是有效的标识符字符。 (相反,文字点不是有效的标识符字符,因此如果后面的字符是文字点,则不需要在标识符周围使用大括号。)
关于linux - 在perl中连接linux命令内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340126/