-bash: Syntaxfehler in der Nähe des unerwarteten Tokens „;“

-bash: Syntaxfehler in der Nähe des unerwarteten Tokens „;“

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 cmdwird 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 2im aktuellen Verzeichnis eine Datei mit dem Namen befindet, lautet diese:

wenn 2, dann echo fi;

Das heißt, der 2Befehl wird mit 4 Argumenten ausgeführt: 2, then, echound fi, als erster Befehl im ifTeil einer if/then/elif/else/fiAnweisung.

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- ifKonstruktion 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 -eqbeim Vergleichen von Zahlen oder =beim Vergleichen von Zeichenfolgen verwendet.

if [ 1 -eq 2 ]; then echo 'y'; fi

verwandte Informationen