2012-06-19 17 views
29

Balıktaki iki dizgiyi nasıl karşılaştırırsınız (diğer dillerde "abc" == "def" gibi)?Balık kabuğunda dizi eşitliği/dizgi karşılaştırması için test?

Şimdiye kadar, ben contains bir arada bir case "what_i_want_to_match" ile (ve switch (contains "" $a sadece $a boş bir dize 0 eğer benim için çalışmak gibiydi olmasına rağmen her durumda, döner çıkıyor) kullandım ve bir case '*'). Bu yöntemlerin hiçbiri özellikle ... doğru görünüyor.

+5

Yani, 'bir komut aslında [' çıkıyor ('/ bin/[' OS X), ** yanı bir Bash farklı sözdizimi kullanılan, yerleşik ** olarak. Git rakam! –

+0

Bu yorum sadece benim günümü yaptı! [Komut gerçekten güçlü bir araçtır. – yagooar

+4

Şahsen, ben aslında tüm komutlarımda '' 'yerine' 'test'' kullanmaya başladım, böylece dilin bir parçası değil, harici bir komut olduğu açıktır. ('test' ve' ['tamamen aynı araçtır.) Tabii ki, 'test' de bir Bash yerleşik olduğunu düşünüyorum. –

cevap

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

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

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

veya bir astar:

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

Aha! Garip, daha önce köşeli parantez denedim sandım; belki de bana attı tek '' 'idi. –

+1

Evet, bekar '=' beni de atar. –

+2

daha kısa bir astar: '[abc = abc]; ve eko eşit " – kzh

8

Bazen balık falsy olan boş dizeleri veya tanımlanmamış değişkenler, kontrol etmek istiyorum.

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 

Ayrıca test yerine [ kullanabilirsiniz.

Pratik bir örnek, git dalında olup olmadığınızı kontrol etmektir.

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 
İlgili konular