2012-06-19 20 views
29

आप मछली में दो तारों की तुलना कैसे करते हैं (जैसे "abc" == "def" अन्य भाषाओं में)?मछली खोल में स्ट्रिंग समानता/स्ट्रिंग तुलना के लिए परीक्षण?

अब तक, मैं का उपयोग किया है contains का एक संयोजन (पता चला है कि contains "" $a केवल रिटर्न 0 अगर $a रिक्त स्ट्रिंग है, कि हालांकि मेरे लिए काम करने के लिए लग रहा था नहीं किया गया है सभी मामलों में) और switch (एक case "what_i_want_to_match" साथ और case '*')। इन तरीकों में से कोई भी विशेष रूप से ... सही नहीं लगता है।

+5

तो, पता चला है '[' वास्तव में एक आदेश है ('/ bin/[' OS X पर), ** के साथ-साथ ** एक बैश builtin, अलग वाक्यविन्यास के साथ। जाओ पता लगाओ! –

+0

इस टिप्पणी ने अभी अपना दिन बनाया है! [आदेश वास्तव में एक शक्तिशाली उपकरण है। – yagooar

+4

व्यक्तिगत रूप से, मैंने वास्तव में '[' 'की बजाय मेरी सभी स्क्रिप्ट में' test' का उपयोग करना शुरू कर दिया है, ताकि यह स्पष्ट हो कि यह बाहरी आदेश है और भाषा का हिस्सा नहीं है। ('test' और' ['वही उपकरण हैं।) बेशक, मुझे लगता है कि 'test' भी एक बैश बिल्टिन है। –

उत्तर

32
if [ "abc" != "def" ] 
     echo "not equal" 
    end 
    not equal 

    if [ "abc" = "def" ] 
     echo "equal" 
    end 

    if [ "abc" = "abc" ] 
     echo "equal" 
    end 
    equal 

या एक लाइनर:

if [ "abc" = "abc" ]; echo "equal"; end 
equal 
+1

आह! अजीब, मैंने सोचा कि मैंने पहले स्क्वायर ब्रैकेट की कोशिश की; शायद यह एकल '=' था जो मुझे फेंक दिया। –

+1

हाँ, एकल '=' मुझे भी फेंकता है। –

+2

छोटे एक लाइनर: '[abc = abc]; और बराबर गूंज " – kzh

8

कभी-कभी आप रिक्त स्ट्रिंग या अपरिभाषित चर है, जो मछली में falsy हैं के लिए जाँच करना चाहते हैं।

set hello "world" 
set empty_string "" 
set undefined_var # Expands to empty string 

if [ $hello ] 
    echo "not empty" # <== 
else 
    echo "empty" 
end 

if [ $empty_string ] 
    echo "not empty" 
else 
    echo "empty" # <== 
end 

if [ $undefined_var ] 
    echo "not empty" 
else 
    echo "empty" # <== 
end 

तुम भी test बजाय [ उपयोग कर सकते हैं।

एक व्यावहारिक उदाहरण यह जांच रहा है कि आप गिट शाखा में हैं या नहीं।

function git_branch 
    echo (command git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||') 
end 

set --local branch_name (git_branch) 

if [ $branch_name ] 
    echo "$branch_name branch checked out" 
else 
    echo "not in a git repo" 
end 
संबंधित मुद्दे