在 shell 命令中使用本地 perl 变量

Posted

技术标签:

【中文标题】在 shell 命令中使用本地 perl 变量【英文标题】:Using local perl variables in shell command 【发布时间】:2017-09-07 15:49:02 【问题描述】:

我正在尝试运行远程查找命令,但我必须将其值从用户的命令行参数中获取的局部变量传递给它。但是,我收到“未定义的变量”错误。我正在做类似的事情:

my $ssh = Net::OpenSSH->new($host);
#I am getting a part of the $path and $pattern from command line
#I have to look for $pattern at the $path
my @files = $ssh->capture(q(find $path -name $pattern) );

当我给出确切的路径和模式时,这个命令运行良好,但是当我用变量替换它时出现错误。

【问题讨论】:

【参考方案1】:
q(find $path -name $pattern)

这是文字字符串find $path -name $pattern、美元符号等等。

Perl 有几种不同的引号。 "" 将插入变量(即用它们的值替换它们),'' 不会。 q() 是写'' 的另一种方式。你想要qq()

请参阅Quote and Quote-Like Operators in perlop 了解更多信息。

【讨论】:

是的,谢谢您的回复。现在,它没有给我一个错误,但它无法获得匹配的模式。也就是说,当我将相同的模式存储在变量中但当我直接在命令中使用模式的值时正在运行时,我得到了“find:no match”。再次感谢:) 我的 $pattern = "40786"; #当我写我的@files = $ssh->capture2(qq(find /u1/temp -name "40786") ); #but return not found 当我使用变量 $pattern 对不起,如果这是一个愚蠢的问题。我是 perl 新手,在其他地方找不到解释。 @emma 这应该可以。没有周围的代码,我无法告诉你出了什么问题。我建议您提出一个新问题并提供一个不起作用的完整程序。

以上是关于在 shell 命令中使用本地 perl 变量的主要内容,如果未能解决你的问题,请参考以下文章

使用 perl 循环中的变量在 perl 循环中运行 shell 命令

将环境变量设置为从 perl 脚本执行的 shell

shell编程概述以及变量

在 vim 编辑中使用 perl 单行命令

如何在perl脚本中忽略shell命令的退出状态

进入由 shell 脚本设置的 perl 程序环境变量