2016-04-14 12 views
0

Ich lerne Bash-Skript und ich schrieb etwas, um es besser zu verstehen. Aber unterhalb von Code verwirrt mich wirklich.Positionsparameter in If-Bedingung funktioniert nicht wie es sollte

#!/bin/bash 
ifEqual() { 
    if [ "$3"="$1" ] ; then 
    echo "$2=$1" 
    else 
    echo "heiheihei" 
    fi 
} 
ifEqual "111" "666" 

Wenn ich diese .sh-Datei aufrufen, wird es "666 = 111" drucken. Aber die Funktion hat nicht einmal einen dritten Parameter. Ich erwarte, dass dieser Code "heiheihei" druckt. Kann mir jemand erklären, was hier passiert? Vielen Dank im Voraus!

+0

Dies ist effektiv ein Duplikat von http://stackoverflow.com/questions/9581064/why-should-be-there-a-space-after-and-before-in-the-bash-script, obwohl dies technisch ist nach verschiedenen fehlenden Räumen fragen. –

Antwort

3

Sie benötigen Leerzeichen um die = für die test Argumente, die korrekt analysiert werden.

if [ "$3" = "$1" ]; then 

So wie du es geschrieben hast, bist du test mit einem einzigen Argumente nennen, und es prüft nur, ob dieses Argument nicht leer ist. Da der Wert dieses Arguments =111 ist, ist es nicht leer, daher ist das Ergebnis des Tests wahr.

+0

Aha! Da gehen wir – Jaaaaaaay

Verwandte Themen