在perl中逃脱双引号

use*_*031 0 perl escaping double-quotes

当我将变量$ local_ntwk_ao_vpn("X0 Subnet")传递给perl脚本时,它只占用了"X0"并丢失了"子网"部分.我试图逃避双引号如下,但仍然无法正常工作.任何帮助是极大的赞赏.


#!/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();
Run Code Online (Sandbox Code Playgroud)

错误日志:

(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
Run Code Online (Sandbox Code Playgroud)

期望的命令:

 (edit-site-to-site[TESTVPN])# network local name "X0 Subnet"
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 5

我相信你错了$ARGV[20]包含X0 Subnet.它似乎只包含X0.

你用过了吗?

script.pl ... X0 Subnet ...
Run Code Online (Sandbox Code Playgroud)

什么时候应该使用

script.pl ... 'X0 Subnet' ...
Run Code Online (Sandbox Code Playgroud)