2011-04-21 9 views
16

लिनक्स खोल प्रोग्रामिंग में तारों की तुलना करने के लिए = और == के बीच क्या अंतर है?लिनक्स खोल प्रोग्रामिंग स्ट्रिंग सिंटैक्स की तुलना

हो सकता है कि निम्नलिखित कोड काम करता है:

if [ "$NAME" = "user" ] 
then 
    echo "your name is user" 
fi 

लेकिन मुझे लगता है कि यह एक सही सिंटैक्स नहीं है। इसका उपयोग == कथन द्वारा स्ट्रिंग की तुलना करने के लिए किया जाएगा।

सही क्या है?

उत्तर

4
इन पृष्ठों

बैश में विभिन्न तुलना ऑपरेटरों की व्याख्या:

दूसरे से जुड़े हुए पृष्ठ पर, आप पाएँगे:

== 

    is equal to 

    if [ "$a" == "$b" ] 

    This is a synonym for =. 
+2

[यह पहले आ गया है] (http://meta.stackexchange.com/questions/15650/ban-lmgtfy-let-me-google-that-for-you -लिंक्स) यह टिप्पणी आपके उत्तर पर आपके कई संशोधनों से पहले बनाई गई थी – Diarmaid

+0

@Diarmaid मुझे पता था कि यह होगा :)। क्या मेरा जवाब कठोर है? शायद, निश्चित रूप से, मैंने अपना समय बर्बाद कर एक प्रश्न पढ़ा जो जवाब खोजने के लिए 10 सेकंड गुगलिंग लेता है। वैसे भी, मैंने वास्तव में एक सही उत्तर टाइप करने का समय भी लिया। तो अब ओपी दोनों को अपना जवाब और पहले खोज करने के लिए एक सभ्य अनुस्मारक मिला। – Darhuuk

+0

वह पहला तकनीक-recipes.com उदाहरण अर्धविराम (या न्यूलाइन?) खोने के कारण मेरे लिए काम नहीं करता था। – FruitBreak

23

एकल बराबर सही है

string1 == string2

string1 = string2

यह सच है, तो तार बराबर हैं। '=' POSIX अनुरूपता

NAME="rafael" 
USER="rafael" 
if [ "$NAME" = "$USER" ]; then 
    echo "Hello" 
fi 
+1

संदर्भ: http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html#Bash-Conditional-Expressions – splaer

1

के लिए परीक्षण के आदेश के साथ प्रयोग किया जाना चाहिए आप एक बार देख here या here ले सकते हैं। जब तार की तुलना व्यक्तिगत रूप से, तार तुलना करने के लिए, मैं case

case "$string1" in 
    "$string2") echo "matched";; 
    *) echo "not matched";; 
esac 

का उपयोग मैं जानना चाहता हूँ जो ऑपरेटर मैं

10

सामान्य तौर पर इस्तेमाल करना चाहिए नहीं है, = ऑपरेटर == रूप में एक ही काम करता है।

नोट: == तुलना ऑपरेटर एकल ब्रैकेट के मुकाबले डबल-ब्रैकेट परीक्षण के भीतर अलग-अलग व्यवहार करता है।

[[ $a == z* ]] # True if $a starts with an "z" (pattern matching). 
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching). 

[ $a == z* ]  # File globbing and word splitting take place. 
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching). 

स्रोत: http://tldp.org/LDP/abs/html/comparison-ops.html

+0

इसके लिए धन्यवाद! मैं एक ऐसे मुद्दे से जूझ रहा था जहां मैंने डबल के बजाय सिंगल स्क्वायर ब्रैकेट का इस्तेमाल किया था। – cbowns