5
#!/usr/bin/perl

$command = "SetBaseStationParam(\\\"PDP_ACTIVATION_REJECT\\\",0);"
system (boa.exp $command);

boa.exp スクリプトは、このコマンドを Linux マシンにログインさせ、スクリプトを実行します。

# /Usr/bin/expect 
set timeout 5
set arg1 [lindex 0]
spawn ssh root@10.xx.xx.xx

expect "password:" 
send "pass\r"
expect "$" 

send "$arg1\r"
expect "$"

しかし、このスクリプトはコマンドの最初の二重引用符を削除し、次のように出力しています

出力は

SetBaseStationParam(\PDP_ACTIVATION_REJECT",0);

期待される出力は

SetBaseStationParam("PDP_ACTIVATION_REJECT",0);

これに対する解決策があれば教えてください

4

1 に答える 1

6

二重バックスラッシュを使用すると、バックスラッシュがエスケープされるため、引用符をエスケープする適切な方法は\".

ただし、より良い解決策は を使用することqq()です。|たとえば、次のようなさまざまな文字を区切り文字として使用できます。

$command = qq|SetBaseStationParam("PDP_ACTIVATION_REJECT",0)|;

または、あなたの場合、一重引用符を使用することもできます

$command = 'SetBaseStationParam("PDP_ACTIVATION_REJECT",0)';

使用しないことに注意する必要があります。

use strict;
use warnings;

確かに非常に悪い考えです。

于 2012-12-12T07:30:20.987 に答える