linux - 在perl中连接linux命令内的变量

标签 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- 黄金数据表明应该提前退出 但在当前的代码中,它不会打印此内容。

输出链接:( 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/

相关文章:

linux - 比较两个目录中的文件名

java - Linux 中如何处理键盘事件?

perl - 在 Perl 中,如何获得多个集合的笛卡尔积?

linux - 在 unix 中第一次出现字符串后中断日志文件

sql - ORA-00054: 资源繁忙并使用指定的 NOWAIT 获取

linux - squid basic_ldap_auth 从用户名中剥离 nt 域

linux - Linux 集群上共享图像文件夹的最佳实践?

json - 在perl中循环遍历json

linux - 如何循环传输管道中的数据?

c - C Pipe 中的 Unix Shell 问题