2012-06-19 16 views
29

Wie vergleichen Sie zwei Strings in Fish (wie "abc" == "def" in anderen Sprachen)?Test für String-Gleichheit/String-Vergleich in Fisch Shell?

Bisher habe ich eine Kombination aus contains (stellt sich heraus, dass contains "" $a gibt nur 0 wenn $a die leere Zeichenkette ist, aber das ist in allen Fällen für mich zu arbeiten nicht schien hat) verwendet und switch (mit case "what_i_want_to_match" und eine case '*'). Keine dieser Methoden scheint jedoch besonders ... korrekt zu sein.

+5

Also, '' 'ist eigentlich ein Befehl ('/bin/['auf OS X), ** als auch ** ein Bash Built-in, mit verschiedenen Syntaxen. Stelle dir das vor! –

+0

Dieser Kommentar hat gerade meinen Tag gemacht! Der [Befehl ist ein wirklich mächtiges Werkzeug. – yagooar

+4

Ich persönlich habe "test" anstelle von "[" in allen meinen Skripten verwendet, sodass klar ist, dass es sich um einen externen Befehl und nicht um einen Teil der Sprache handelt. ('test' und' ['sind das exakt gleiche Werkzeug.) Natürlich denke ich, dass' test' auch ein Bash-Built-In ist. –

Antwort

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

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

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

oder Motto:

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

Aha! Seltsam, ich dachte, ich hätte es vorher mit eckigen Klammern versucht; vielleicht war es die Single '=', die mich geworfen hat. –

+1

Ja, die Single '=' wirft mich auch. –

+2

kürzerer Liner: '[abc = abc]; und Echo gleich " – kzh

8

Manchmal wollen Sie für leere Strings oder nicht definierte Variablen, um zu überprüfen, die in Fisch falsy sind.

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 

Sie können auch test statt [ verwenden.

Ein praktisches Beispiel ist die Überprüfung, ob Sie in einem Git-Zweig sind.

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 
Verwandte Themen