我有这个Perl脚本:
#!/usr/bin/perl
$var = `ls -l \$ddd` ;
print $var, "\n";
ddd是一个shell变量
$ echo $ddd
arraytest.pl
当我执行Perl脚本时,我得到目录中所有文件的列表,而不只是一个文件,其文件名包含在shell变量$ ddd中。
这里发生了什么?请注意,我在Perl脚本的反引号中转义$ ddd。
答案 0 :(得分:5)
在您从Perl脚本调用的shell中,变量$ddd
未设置*。
普通的shell变量不会被子进程继承。环境变量是。
如果您希望这样做,您需要在调用Perl脚本之前在shell中执行以下操作之一:
ddd=arraytest.pl ; export ddd # sh
export ddd=arraytest.pl # bash, ksh, zsh
setenv ddd arraytest.pl # csh, tcsh
这将使您的Perl脚本可以看到环境变量$ddd
。但是,将它称为$ENV{ddd}
可能更有意义,而不是将文字字符串'$ddd'
传递给shell并让它扩展它:
$var = `ls -l $ENV{ddd}`;
答案 1 :(得分:3)
答案 2 :(得分:2)
哈希%ENV
包含您当前的环境。
$var = `ls -l $ENV{ddd}`;
/ edit - 它工作,检查,当然ddd需要在运行脚本之前导出
export ddd='arraytest.pl'
perl script.pl