【发布时间】:2016-11-07 11:06:19
【问题描述】:
当我将变量 $local_ntwk_ao_vpn ("X0 Subnet") 传递给 perl 脚本时,它只占用了 "X0" 而丢失了 "Subnet" 部分。我试图如下逃避双引号,但仍然没有工作。非常感谢任何帮助。
#!/usr/bin/perl
use Expect;
#Assume the first 20 args are OK
my $local_ntwk_ao_vpn = $ARGV[20]; # <-----"X0 Subnet"
# Telnet into the remote firewall
my $expect = Expect->new();
$expect->spawn("telnet 10.100.100.100 6025");
$expect->send("\n");
sleep(3);
$expect->expect( 10, 'User:' );
$expect->send("aUser\n");
$expect->expect( 10, 'Password:' );
$expect->send("password\n");
$expect->expect( 5, '>' );
$expect->send("configure\n");
$expect->expect( 5, '#' );
$expect->send("vpn policy site-to-site TESTVPN\n");
$expect->expect( 5, '#' );
$expect->send("network local name \"$local_ntwk_ao_vpn\"\n"); # <-- Still doesn't work here.
$expect->expect( 5, '#' );
$expect->send("exit\n");
$expect->send("end\n");
$expect->soft_close();
错误日志:
(edit-site-to-site[TESTVPN])# network local name "X0"
% Error encountered at '^' marker:
network local name "X0"
^^M
% Error: No matching command found.
(edit-site-to-site[TESTVPN])# exit
所需的命令:
(edit-site-to-site[TESTVPN])# network local name "X0 Subnet"
【问题讨论】:
-
请注意,如果您在调用此脚本时不引用整个值,shell 会将 args 拆分为它们之间的空格,并将它们作为两个连续的 args 传递。如果在调用脚本时确实引用了该值,shell 会将两个单词和它们之间的空格保留为单个 arg,在 Perl 获取该值之前去除引号。您需要引用传递给脚本的值,意识到这是为了 shell 的利益。
标签: perl escaping double-quotes