我在将 unix 命令的返回值放入 perl 变量时遇到问题。
Unix命令:
#nc -z 8.8.8.8 441; echo $?
1
Perl 命令:
#perl -e 'my $pstate=`nc -z 8.8.8.8 441; echo $?`; print $pstate;'
0
那么 perl 命令似乎得到了“无错误”的返回值?如何正确捕获 *nix 命令的返回值?
另一个例子:
#perl -e 'my $pstate=`ping -v 8.8.8.8 -c 1`; print $pstate;'
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
这将返回正确的值。那么我首先做错了什么?
最佳答案
变量在反引号内插入,所以 $?
在
my $pstate=`nc -z 8.8.8.8 441; echo $?`
指的是 Perl 的
$?
, 不是 shell 的 $?
. shell 看到的东西就像nc -z 8.8.8.8 441 ; echo 0
要解决此问题,您可以转义 shell 命令
my $pstate=`nc -z 8.8.8.8 441; echo \$?`;
或使用
qx
以单引号作为分隔符的运算符(这是“qx
运算符内的插值”规则的一个异常(exception))my $pstate=qx'nc -z 8.8.8.8 441; echo $?';
或使用
readpipe
使用非内插报价结构my $pstate= readpipe( 'nc -z 8.8.8.8 441; echo $?' );
my $pstate= readpipe( q{nc -z 8.8.8.8 441; echo $?} );
关于perl - 如何正确捕获unix命令的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18223668/