Wie man bash sagt, dass die Zeile in der nächsten Zeile fortgesetzt wird

98

In einem Bash-Skript, das ich von einem anderen Programmierer erhalten habe, waren einige Zeilen länger als 80 Spalten. Was ist das Zeichen oder Ding, das der Zeile hinzugefügt werden soll, um anzuzeigen, dass die Zeile in der nächsten Zeile fortgesetzt wird?

Mach den Weg frei
quelle
Weitere Informationen finden Sie
Enharmonic

Antworten:

127

Der Charakter ist ein Backslash \

Aus dem Bash-Handbuch :

Das Backslash-Zeichen '\' kann verwendet werden, um eine spezielle Bedeutung für das nächste gelesene Zeichen und für die Zeilenfortsetzung zu entfernen.

Guillaume
quelle
Vielen Dank. und was ist die übliche Grenze in Spalten eines Bash-Skripts?
Öffnen Sie den Weg
bash hat keine interessante Spaltenbegrenzung; Aus Gründen der Übersichtlichkeit sollten Sie versuchen, die Anzahl auf 70-80 Zeichen pro Spalte zu beschränken.
Habbie
9
@RyanM Der Backslash muss das allerletzte Zeichen vor dem Zeilenendezeichen sein. Sind Sie sicher, dass Sie nach dem \ kein Leerzeichen mehr haben?
George
9
@ George Ja. Ein bisschen mehr Fummelei spuckte einen Fehler mit a aus ^M. Das Problem scheint zu sein, dass mir das Skript von jemandem gegeben wurde, der Windows verwendet. Eine schnelle dos2unix
Lösung
2
@ George dein Kommentar hat mich gerade gerettet, ich hatte ein Leerzeichen nach dem \ und ich konnte nicht herausfinden, was los war. Prost!
Jungvogel
36

Im Allgemeinen können Sie einen Backslash am Ende einer Zeile verwenden, damit der Befehl mit der nächsten Zeile fortfährt. Es gibt jedoch Fälle, in denen Befehle implizit fortgesetzt werden, nämlich wenn die Zeile mit einem Token endet, ohne dass ein Befehl legal beendet werden kann. In diesem Fall weiß die Shell, dass weitere kommen, und der Backslash kann weggelassen werden. Einige Beispiele:

# In general
$ echo "foo" \
> "bar"
foo bar

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar

Anders, aber verwandt ist die implizite Fortsetzung in Anführungszeichen. In diesem Fall fügen Sie der Zeichenfolge ohne Backslash einfach eine neue Zeile hinzu.

$ x="foo
> bar"
$ echo "$x"
foo
bar

Mit einem Backslash teilen Sie die logische Zeile erneut in mehrere logische Zeilen auf.

$ x="foo\
> bar"
$ echo "$x"
foobar
chepner
quelle
Gibt es eine formelle Liste solcher Situationen, in denen ein Befehl implizit in der nächsten Zeile fortgesetzt wird? Es scheint mir , dass ich den umgekehrten Schrägstrich aus unter bestimmten Umständen innerhalb eines verlassen konnte [[- ]]Zustand, in anderen aber nicht, und ich versuche , die Regeln zu Figur.
Menachem
16

\macht den Job. Die Antwort von @ Guillaume und der Kommentar von @ George beantworten diese Frage eindeutig. Hier erkläre ich, warum The backslash has to be the very last character before the end of line character.Sie diesen Befehl berücksichtigen:

   mysql -uroot \
   -hlocalhost      

Wenn danach ein Leerzeichen vorhanden ist \, funktioniert die Zeilenfortsetzung nicht. Der Grund dafür ist, dass \ die spezielle Bedeutung für das nächste Zeichen entfernt wird, bei dem es sich um ein Leerzeichen handelt, das nicht das unsichtbare Zeilenvorschubzeichen ist. Das Zeilenvorschubzeichen steht nach dem Leerzeichen \in diesem Beispiel nicht.

Jingguo Yao
quelle
2
Vielen Dank, dass Sie auf den Teil "allerletzter Charakter" hingewiesen haben. Ich war ein bisschen frustriert, genau diesen Fehler zu verfolgen.
Jason