perl对于反引号(``)以及system之间的不同

Perl的反引号(``)和system函数都能执行系统命令,但用途不同。反引号捕获命令输出并返回,不显示结果;system执行命令并将退出状态码返回,结果通常直接输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反引号(``)以及system都是perl中执行系统命令的方式,但是两者有较大的不同。

总体概括一下,在perl程序中“`$cmd`” 获取的是程序执行结果,而system($cmd)获取的是程序执行后的返回值。

详情参看如下示例:

操作系统 & perl 版本:

[root@mdw ~]# uname -a
Linux mdw 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@mdw ~]# perl -v

This is perl, v5.8.8 built for x86_64-linux-thread-multi

Copyright 1987-2006, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.


demo示例:

#!/usr/bin/perl
use strict;

my ($cmd,$ret1,$ret2);

$cmd = "ls /tmp";

print "*************执行反引号结果*****************\n";
$ret1 = `$cmd`;

print "*************执行system结果*****************\n";
$ret2 = system($cmd);


print "*************反引号方式*****************\n";
print $ret1 ;


print "*************下面是system方式*****************\n";
print $ret2 ;

执行结果如下:

[root@mdw ~]# perl 20150325.pl 
<span style="color:#ff6666;">*************执行反引号结果*****************#反引号执行结果输出为空</span>
*************执行system结果*****************<span style="color: rgb(255, 102, 102); font-family: 'Microsoft YaHei';">#system将执行结果输出</span>
dsp.war         keyring-BRRbfe  keyring-ef4G7O  keyring-qF3esN  mapping-root                     ssh-LdGZWd5072       vmware-root
edsSvc.war      keyring-CLv3aa  keyring-Ib7ubB  keyring-w6ccVd  OraInstall2014-12-10_11-03-22PM  virtual-root.KIEbpb
gconfd-root     keyring-D3X4iy  keyring-iXPFuW  keyring-yDTyOo  orbit-root                       virtual-root.nNRBCU
keyring-ap4Ph9  keyring-eC7MRe  keyring-nSr1Pp  keyring-YzW56H  ssh-BGYzXS4811                   VMwareDnD
*************反引号方式*****************
dsp.war
edsSvc.war
gconfd-root
keyring-ap4Ph9
keyring-BRRbfe
keyring-CLv3aa
keyring-D3X4iy
keyring-eC7MRe
keyring-ef4G7O
keyring-Ib7ubB
keyring-iXPFuW
keyring-nSr1Pp
keyring-qF3esN
keyring-w6ccVd
keyring-yDTyOo
keyring-YzW56H
mapping-root
OraInstall2014-12-10_11-03-22PM
orbit-root
ssh-BGYzXS4811
ssh-LdGZWd5072
virtual-root.KIEbpb
virtual-root.nNRBCU
VMwareDnD
vmware-root
*************下面是system方式*****************
<span style="color:#ff0000;">0</span>[root@mdw ~]# 


从上面的执行结果可以看出,当调用system命令的时候,系统会将执行结果输出到屏幕,并且将执行结果返回值(0或者非0)传给$ret2 ;

然而反引号(``)将会把所有结果都保存到变量$ret1上,并且不会输出任何结果。


有兴趣的同学可以将$cmd改成一个执行错误的命令,并且执行程序,查看输出

#################################################################################################

  小P工作室提供专业perl培训 . 解决perl开发过程中遇到各种问题.

  沟通交流群 :438349855   QQ :1400184751 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值