echo不适用于PATH变量!

Joe*_*Joe 0 perl

当我运行ls命令时运行正常.但是echo $PATH没有给我任何来自perl的输出.当我echo从shell提示符运行它给我输出.你能解释一下这种行为吗?

#!usr/bin/perl

$\="\n";

$out = `ls`;
print $out;

$out=`echo $PATH`;
print $out;
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 6

反引号插入像双引号,所以你需要逃避$.

$out=`echo \$PATH`;
Run Code Online (Sandbox Code Playgroud)

  • 或者,作为替代方案,有一个通用引用运算符qx,如果'用作分隔符,则不进行插值:`$ out = qx'echo $ PATH';`. (6认同)

DVK*_*DVK 6

请注意,虽然技术上正确的问题答案是$插值,但您还应注意,不应将Perl视为shell脚本,而应通过反引号调用外部命令,而不是使用为此目的设计的Perl内置函数或库函数:

$out = join("\n", glob("*")); # same as `ls`
$out = $ENV{PATH}; # same as `echo $PATH`
Run Code Online (Sandbox Code Playgroud)

这有几个显着的优点:

  • 速度(没有呼叫系统)
  • 可移植性
  • 更安全(没有shell攻击向量)
  • 大多数内置插件都比您自己的系统调用实现更适合您的错误处理
  • 几乎总是更好,更清洁,更短,更容易阅读/维护代码


w.k*_*w.k 5

$PATH 是shell变量,从perl你应该使用它作为perl变量 $ENV{PATH}

仍然尝试阅读一些基本的文档,比如perldoc perlintro.echo根本不需要执行.