【问题标题】:Escape double quote in perl在 perl 中转义双引号
【发布时间】: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


【解决方案1】:

我相信您对包含X0 Subnet$ARGV[20] 有误。它似乎只包含X0

你用过

script.pl ... X0 Subnet ...

你应该在什么时候使用

script.pl ... 'X0 Subnet' ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-17
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2016-10-02
    相关资源
    最近更新 更多