2016-08-01 42 views
0

Was ist das Sub-Eingabe-Terminal, das angezeigt wird, wenn ich das Zeichen \ oder` (Backtick) in eine Linux-Befehlszeile eintippe? Es zeigt sich mit einer Eingabeaufforderung, die ein einzelnes Zeichen ">" enthält. (siehe Bild unten)Sub-Befehlszeile nach Eingabe von oder `in Linux

Es scheint fast ein Skript Terminal zu sein (wie Pythons ">>>").

enter image description here

Ich habe versucht, Google zu fragen, aber die Frage ist schwer zu erklären.

Antwort

2

Es wartet nur auf einen abschließenden Backtick.

Sie können die Ausgabe von einem Kommando mit diesen Backticks erhalten und sie einer Variablen zuweisen. Wenn Sie myvar=`ls` tun würden, würde die Ausgabe von ls myvar zugewiesen werden.

Sie können myvar=$(ls) ebenfalls verwenden, und einige schlagen vor, es ist noch moderner.

Der Fall für die \ ist ein bisschen anders. Der Backslash erlaubt es, der Bedeutung des nächsten Zeichens zu entkommen. Wenn Sie die Zeile normalerweise "beenden", wird der Befehl ausgeführt, aber nicht, wenn die Zeilenendung mit Escapezeichen versehen ist. Dies kann beim Schreiben von Shell-Skripten nützlich sein und Sie möchten lange Befehle über mehrere Zeilen verteilen.

+0

Danke. Ich hatte gehofft, dass ich eine neue Supermacht für die Kommandozeile lernen würde:/ – javey

+0

@javey: Das Einfügen beliebiger Zeilenumbrüche ist keine Supermacht? –

+0

"Einige schlagen vor"? Es gibt keine Frage in den historischen Aufzeichnungen; Die '$()' -Syntax wurde in POSIX eingeführt, lange nachdem Bourne die Unterstützung von Literal-Backticks implementiert hat (und das aus gutem Grund: Literal-Backticks sind schwer zu verschachteln, und die für das Zitieren benötigte Syntax ist überraschend und schwierig zu benutzen). –

0

Es wird nur erwartet, dass Sie den vorherigen Befehl fortsetzen, da der newline (drücken Sie Enter Schlüssel) es nicht schließt.

2

Diese Eingabeaufforderung ist PS2 (genau wie Ihre Standard-Shell-Eingabeaufforderung durch die Variable PS1 definiert ist). Von the POSIX standard:

PS2 - Jedes Mal, gibt der Benutzer ein <newline> vor einer Befehlszeile in einer interaktiven Shell, der Wert dieser Variablen auf die Vollendung ist auf Parameter Expansion und geschrieben Standardfehler unterzogen werden. Der Standardwert ist "> ". In diesem Band von POSIX.1-2008 werden die Auswirkungen der Variablen nur für Systeme angegeben, die die Option Utility Portability Utilities unterstützen.


So gedruckt wobei dies bedeutet, dass Sie eine unvollständige Befehlszeile in einer interaktiven Shell eingegeben haben. Sie hätten das gleiche, wenn Sie andere Arten von Anführungszeichen nicht abgeschlossen hätten, oder eine if Anweisung ohne eine schließende fi.

+1

Danke für das POSIX-Standardangebot.Ich kann jetzt PS2 zu etwas wie "schließe deinen dang' $ "exportieren, also erinnere ich mich, was diese Aufforderung bedeutet. – javey

+1

@javey Sie erhalten es auch nach '(', 'while',' if', '\', '" 'und einer Menagerie anderer Schlüsselwörter und Zeichen. –

+0

@thatotherguy das wird für eine lange Aufforderung machen. .. – javey