2017-04-12 89 views
1

我试图运行远程查找命令,但我必须将其值从用户的命令行参数获得的值传递给本地变量。但是,我收到了一个“未定义的变量”错误。我做的是这样的:在shell命令中使用本地perl变量

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)); 

此命令运行正常,当我给出确切的路径和模式,但我得到的错误,当我用变量替换它。

回答

2
q(find $path -name $pattern) 

这是字面上的find $path -name $pattern,美元符号和所有。

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

有关更多信息,请参阅Quote and Quote-Like Operators in perlop

+0

是的,谢谢你的回复。现在,它不会给我一个错误,但它无法获得匹配的模式。也就是说,当我将相同的模式存储在变量中时,我得到了“find:no match”,但是当我直接在命令中使用模式值时正在运行。 再次感谢:) – emma

+0

my $ pattern =“* 40786 *”;当我编写我的@files = $ ssh-> capture2(qq(find/u1/temp -name“* 40786 *”))时运行。 #但是当我使用变量$ pattern时没有找到返回 对不起,如果它是一个愚蠢的问题。我是perl的新手,无法在别处找到解释。 – emma

+0

@emma这应该工作。没有周围的代码,我不能告诉你什么是错的。我建议你问一个新的问题,并提供一个完整的程序不起作用。 – Schwern