我有这样的Perl脚本:访问shell变量在Perl程序
#!/usr/bin/perl
$var = `ls -l \$ddd` ;
print $var, "\n";
和DDD是一个shell变量
$ echo $ddd
arraytest.pl
当我执行的Perl脚本,我得到的所有文件中的列表目录而不是只有一个文件,其文件名包含在shell变量$ ddd中。
这里发生了什么?请注意,我在Perl脚本中以反引号方式转义$ ddd。
我有这样的Perl脚本:访问shell变量在Perl程序
#!/usr/bin/perl
$var = `ls -l \$ddd` ;
print $var, "\n";
和DDD是一个shell变量
$ echo $ddd
arraytest.pl
当我执行的Perl脚本,我得到的所有文件中的列表目录而不是只有一个文件,其文件名包含在shell变量$ ddd中。
这里发生了什么?请注意,我在Perl脚本中以反引号方式转义$ ddd。
变量$ddd
没有设置*在shell您从Perl脚本调用。
普通shell变量不会被子进程继承。环境变量是。
如果你想要这个工作,你需要做的外壳下面的一个调用你的Perl脚本之前:
ddd=arraytest.pl ; export ddd # sh
export ddd=arraytest.pl # bash, ksh, zsh
setenv ddd arraytest.pl # csh, tcsh
这将使环境从你的Perl脚本变量$ddd
可见。但是,那么它可能更有意义,称其为$ENV{ddd}
,而不是文字串'$ddd'
传递到外壳,让它展开:
$var = `ls -l $ENV{ddd}`;
散列%ENV
包含您当前的环境。
$var = `ls -l $ENV{ddd}`;
/编辑 - 它的工作原理,托运,当然DDD的需要行书之前导出
export ddd='arraytest.pl'
perl script.pl
只有当它是一个环境变量 - 如果它是,原始代码才会起作用,因为它将文字''ddd''传递给shell,它会扩展它。 –
它没有工作。我试图打印$ ENV {ddd},但没有o/p。 – abc
是的,很好的抓住它不是一个环境变量。它是一个shell变量。我没有出口它。有没有一种方法可以在Perl的backquotes中指定shell变量? – abc