2012-12-12 15 views
5
#!/usr/bin/perl 

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

boa.exp स्क्रिप्ट में डबल कोट्स से बचने से boa.exp स्क्रिप्ट इस कमांड को लिनक्स मशीन पर ले जाएगी और स्क्रिप्ट निष्पादित करेगी।स्क्रिप्ट

# /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 या एकल उद्धरण (') के साथ भी काम नहीं करता है। अब आउटपुट जो कि क्यूक या सिंगल कोट्स सेटबेस बेसेशन पैराम (PDP_ACTIVATION_REJECT, 1) – Tkills

+0

सूची फॉर्म का उपयोग करने का प्रयास करें, उदा। 'सिस्टम (qw | boa.exp SetBaseStationParam ("PDP_ACTIVATION_REJECT", 0) |);' तब खोल स्वयं उद्धरण करता है। – TLP

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^