Was ist dann das richtige Format für „if“?
Ich habe viele verschiedene ausprobiert.
Sollte das Format in der Befehlszeile funktionieren, wenn man sich nicht in einem Programm befindet?
$ if [1==2] then echo "y" fi;
> ;
-bash: syntax error near unexpected token `;'
Antwort1
Den Fehler hat bisher noch niemand erklärt.
Du bist eingetreten:
if [1==2] then echo "y" fi;
;
Die erste Zeile war für die Shell eine vollkommen gültige Syntax. Sie hat folgende Form:
if cmd args
In diesem Fall cmd
wird aus der Erweiterung des [1==2]
Globbers abgeleitet. [1==2]
ist ein Globbing-Muster, das auf die Liste der Dateien im aktuellen Verzeichnis erweitert wird, deren Name entweder aus einem 1
- =
oder 2
-Zeichen besteht.
Wenn sich beispielsweise 2
im aktuellen Verzeichnis eine Datei mit dem Namen befindet, lautet diese:
wenn 2, dann echo fi;
Das heißt, der 2
Befehl wird mit 4 Argumenten ausgeführt: 2
, then
, echo
und fi
, als erster Befehl im if
Teil einer if/then/elif/else/fi
Anweisung.
Der Fehler kommt von dieser Sekunde ;
in der zweiten Zeile. Sie hätten dieselbe Fehlermeldung erhalten, wenn Sie dies ;
allein in der Befehlszeile eingegeben hätten. ;
muss verwendet werden, um Befehle zu trennen, es kann nicht allein verwendet werden.
Antwort2
Die korrekte Form der Bash- if
Konstruktion ist
if something; then command; fi
Die korrekte Form dessen, was Sie anscheinend versuchen zu tun, ist
if [ 2 -eq 2 ]; then echo "y"; fi;
Leerzeichen sind in Bash wichtig.
Antwort3
Probier diese:
if [ 1 == 2 ]; then echo "y" ; fi
Und verwenden Sie besser -eq
, es sei denn, Sie möchten 1 und 2 als Zeichenfolgen vergleichen.
Nützlicher Link:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
Antwort4
Der ==
Operator existiert in Bash nicht. Er wird entweder -eq
beim Vergleichen von Zahlen oder =
beim Vergleichen von Zeichenfolgen verwendet.
if [ 1 -eq 2 ]; then echo 'y'; fi