2012-12-12 37 views
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 [email protected] 

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

send "$arg1\r" 
expect "$" 

但是這個腳本在命令除去第一雙引號,並打印出來作爲

輸出

SetBaseStationParam(\PDP_ACTIVATION_REJECT",0); 

預計產量

SetBaseStationParam("PDP_ACTIVATION_REJECT",0); 

請讓我知道如果有任何解決方案,請點擊這裏

回答

6

當你使用雙反斜線逃離了反斜線,所以逃避報價的正確方法是\"

然而,一個更好的解決方案是使用qq()。它可以用各種各樣的字符作爲分隔符的使用,如|例如:

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

或者在你的情況下,即使使用單引號

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

你應該知道,沒有使用

use strict; 
use warnings; 

是一個非常糟糕的主意確實如此。

+0

它沒有工作,甚至用QQ或單引號(')。 現在它與QQ或單引號 SetBaseStationParam輸出(PDP_ACTIVATION_REJECT,1) – Tkills

+0

嘗試使用列表形式,例如'system(qw | boa.exp SetBaseStationParam(「PDP_ACTIVATION_REJECT」,0)|);'然後shell執行引用本身。 – TLP