【问题标题】:pipe ls output to one line perl script管道 ls 输出到一行 perl 脚本
【发布时间】:2013-12-26 11:14:45
【问题描述】:

命令

ls | perl -lane "print $ARGV[0]"

我尝试将 ls 输出通过管道传输到一行 perl 脚本并打印参数,但我得到以下输出。使用的 perl 版本是为 sun4-solaris-64int 构建的 5.8.4。

结果

ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)
ARRAY(0x229e8)

列出目录中的文件需要进行哪些更改?

【问题讨论】:

  • 在 Unix 中,shell 命令中的双引号会插入变量。由于您的 shell 环境中可能没有定义名为 ARGV 的变量,因此您的代码等效于 ... | perl -lane 'print [0]'

标签: perl bash solaris


【解决方案1】:

当前行被分配给$_,所以你想要类似的东西

ls | perl -lne 'print $_'

【讨论】:

    【解决方案2】:

    即使ls 这里只是一个例子,值得一提的是,没有任何理由将它的输出通过管道传输到 Perl。要获得类似 ls 的列表(无点文件),您可以使用:

    $ perl -e 'my @f = glob("*"); print join("\n", @f) . "\n"'
    

    $ perl -e 'my @f = <*>; print join("\n", @f) . "\n"'
    

    请注意,第二个不接受变量替换(@f = &lt;$mypattern&gt; 是错误的)。

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2016-01-17
      相关资源
      最近更新 更多