': kein gültiger Bezeichner zum Lesen

': kein gültiger Bezeichner zum Lesen

Ich verwende Notepad++ und gebe ein:

    read s
    echo "$s"

Die Ausgabe ist:

<code>': kein gültiger Bezeichner</code>

Und dann versuche ich ein Semikolon einzufügen:

read s;
echo "$s"

und die Ausgabe ist:

Bildbeschreibung hier eingeben

Ich speichere die Datei unter q.shund führe sie mit Cygwin aus, kann readden Operator aber trotzdem nicht verwenden, was mich verwirrt. Ich habe viauch andere Editoren ausprobiert, aber die Ausgabe ist die gleiche.

Was ist falsch? Wie kann es funktionieren?

Antwort1

Die Textdatei, aus der das Shell-Skript besteht, wurde in Notepad++ geschrieben. Dieser Editor speichert Dateien standardmäßig als DOS-Textdateien, was aus Unix-Sicht einen überflüssigen Wagenrücklauf ( \r) am Ende jeder Zeile bedeutet. Dies ist verwirrend sh.

Es zu entfernen:

$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh

Das DrehbuchtutEs fehlt eine #!-Zeile (wie in den Kommentaren erwähnt), aber solange Sie es mit einem expliziten Interpreter ( sh q.sh) ausführen, ist dies nicht erforderlich.

Hinzufügen der Zeile

#!/bin/sh

würde (nach chmod +x q.sh) dazu führen, dass sich die Ausführung als ./q.shgenauso verhält wie die Ausführung mit sh q.sh.

Antwort2

Eine weitere Möglichkeit, den Wagenrücklauf für Unix zu konvertieren, wenn Sie Zugriff auf Notepad++ haben. Gehen Sie in Notepad zu: Bearbeiten -> EOL-Konvertierung -> Unix (LF)

Auf Französisch heißt es: Edition -> Convertir les sauts de ligne -> Converti au format Unix (LF)

Es geht auch schneller.

verwandte Informationen