2013-06-17 2 views
12
#!/bin/bash 
function getComment(){ 
    local lang=$1; 
    local theComment=$2; 
    if [$lang == "Java"] #Surprisingly, an error occurs here: prog.sh: line 6: [Java: command not found 
    then 
     echo "//"$theComment; return; 
    else 
     echo "Language not found!"; return; 
    fi 
} 

getComment "Java" "Whoo!"; 

exit $? 

मैं एक बैश स्क्रिप्ट शाब्दिक एक स्ट्रिंग के लिए एक चर तुलना लिख ​​रहा हूँ, और मैं [$lang == "Java"] उपयोग कर रहा हूँ (जैसा कि ऊपर दिखाया गया है) lang"Java" के मूल्य की तुलना करने के लिए । हालांकि, इस तुलना निम्न त्रुटि पैदा करता है:एक बैश स्ट्रिंग शाब्दिक तुलना एक स्थानीय चर

stderr: 
prog.sh: line 6: [Java: command not found 

मैं भी [$lang -eq "Java"] और ($lang -eq "Java") का उपयोग कर की कोशिश की है, लेकिन उन बयानों या तो काम नहीं किया, और वे ठीक उसी त्रुटि का उत्पादन किया।

यह त्रुटि क्यों हो रही है, और स्थानीय चर की तुलना स्ट्रिंग अक्षर से करने का सही तरीका क्या है?

+0

यह आपके प्रश्न के लिए प्रासंगिक नहीं है, लेकिन आपको खोल में लाइनों के अंत में अर्धविराम की आवश्यकता नहीं है। यदि आप एक पंक्ति पर एक से अधिक कमांड डालते हैं तो उन्हें केवल तभी आवश्यकता होती है। –

+0

[bash, कमांड नहीं मिला] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/16694586/bash-command-not-found) – chepner

+1

सबसे अच्छा डुप्लिकेट नहीं है, लेकिन उसी उत्तर के साथ स्टैक ओवरफ़्लो पर कई प्रश्न हैं : 'test' कमांड के' ['और'] 'के आस-पास की जगहें रखें। – chepner

उत्तर

22

आप [ और ] के साथ स्पेस की जरूरत है:

if [ "$lang" = "Java" ] 

[ एक कमांड (यह test के लिए एक पर्याय है) है, और किसी भी अन्य आदेश की तरह आप रिक्तियों के साथ मानकों परिसीमित।

यदि मूल्य खाली है या व्हाइटस्पेस या वाइल्डकार्ड वर्ण हैं, तो आपको डबल कोट्स में वेरिएबल्स भी रखना चाहिए।

अंत में, स्ट्रिंग तुलना करने के लिए ऑपरेटर = है, हालांकि test के कुछ संस्करण == को विस्तार के रूप में अनुमति देते हैं।

+0

संदर्भ –

1

पहली बात यह है कि इसका उपयोग न करें [] - यह better का उपयोग करने के लिए [[। चर कुछ रिक्ति या विशेष वर्ण हो सकता था क्योंकि

if [[ $lang == Java ]] 
+0

के साथ अच्छा जवाब == तुलना ऑपरेटर एकल ब्रैकेट के मुकाबले डबल-ब्रैकेट परीक्षण के भीतर अलग-अलग व्यवहार करता है। http://tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS –

2

सबसे पहले, आप दोहरे उद्धरण चिह्नों के बीच चर संलग्न करने के लिए है,: -

और दूसरा आप कुछ रिक्त स्थान जोड़ने की जरूरत है।

अंत में याद रखें कि "[" यह स्वयं द्वारा निष्पादन योग्य है (आमतौर पर/bin में है)।

if [ "$lang" == "Java" ]; then 
संबंधित मुद्दे