read -p "Please Enter a Message:" message
Wie kann ich einen Zeilenumbruch nach Message:
hinzufügen?Wie füge ich einen Zeilenumbruch für den Lesebefehl hinzu?
read -p "Please Enter a Message:" message
Wie kann ich einen Zeilenumbruch nach Message:
hinzufügen?Wie füge ich einen Zeilenumbruch für den Lesebefehl hinzu?
ich mag Huang F. Lei's answer, aber wenn man den wörtlichen Zeilenumbruch nicht mögen, das funktioniert:
read -p "Please Enter a Message: `echo $'\n> '`" message
Shows:
Please Enter a Message: > _
... wo _
ist, wo der Cursor nach oben endet. Beachten Sie, dass nachfolgende Zeilenumbrüche in der Regel während der Befehlsersetzung gelöscht werden. Ich habe danach die >
eingefügt. Aber eigentlich Ihre ursprüngliche Frage scheint nicht, dass die schnelle Bit zu wollen, so:
# Get a carriage return into `cr` -- there *has* to be a better way to do this
cr=`echo $'\n.'`
cr=${cr%.}
# Use it
read -p "Please Enter a Message: $cr" message
Zeigt
Please Enter a Message: _
Es muss ein besserer Weg sein, aber.
Ich hoffe es gibt einen besseren Weg :) – Strawberry
@Doug: Yeah. Nur mit einer * leichten * Verbesserung aktualisiert. Ich bin immer noch nicht glücklich damit. :-) –
@Doug: Obwohl ich jetzt darüber nachdenke, da 'echo' (wie' read') ein bash eingebaut ist, obwohl das oben genannte ein bisschen peinlich ist, es zumindest nicht unnötig Prozesse hervorbringt. –
Vom bash
manpage:
-p prompt
Display prompt on standard error, without a trailing new-
line, before attempting to read any input. The prompt is
displayed only if input is coming from a terminal.
also nicht mit read
selbst und setzen \n
in dem Meldungs-String-Echo nur \n
. Die Antwort sollte jedoch einfach sein - nicht bekommen read
die Eingabeaufforderung angezeigt werden.
echo "Please Enter a Message:" 1>&2
read message
Aber das 'Echo' wird passieren, ob die Eingabe von einem Terminal kommt oder nicht; Die Meldung 'read' wird nicht angezeigt. –
Messepunkt, _wenn das Skript nicht interaktiv verwendet wird. – Alnitak
Auch würde ich Echo auf Fehlerstrom umleiten müssen. – Strawberry
$ read -p "Please Enter a Message:
> " message
Please Enter a Message:
Eingabe einen "Newline" zwischen ':' und '"' direkt
saubere Lösung, aber könnte jemanden verwirrt den Code später lesen. – Alnitak
Es funktioniert, aber es ist wirklich ein Ghetto-Fix. +1 unabhängig. – Strawberry
Es ist, was für mich funktioniert, weil ich auch eine Variable habe, und mit der 'read -p $ (echo -e 'Bitte geben Sie eine Nachricht: \ n \ b')" Nachricht "Lösung, druckt es den Variablennamen wörtlich . Diese Lösung wird ordnungsgemäß erweitert. – aliteralmind
read -p "Please Enter a Message:
Return" message
Funktioniert nicht für mich mit bash auf Ubuntu 10.04. Bist du dir deiner Syntax sicher? –
Vielleicht wollen Sie den Return-Key als die Huang F. Lei-Lösung schlagen? –
@LucaBorrione: ja –
einfach zu verbessern, um die Antworten von Huang F. Lei und von T.J. Crowder, die ich mag (und +1 hinzugefügt) .. Sie eine der folgenden Syntaxen verwenden, die im Grunde die gleichen sind, es auf Ihrem Geschmack abhängt (I bevorzugen die erste):
read -p "$(echo -e 'Please Enter a Message: \n\b')" message
read -p "`echo -e 'Please Enter a Message: \n\b'`" message
die beide die folgende Ausgabe erzeugen wird:
Please Enter a Message:
_
wobei _ der Cursor befindet.
Falls Sie eine neue Zeile in jedem Teil der Zeichenfolge benötigen, aber am Ende, können Sie \n
zum Beispiel
read -p "`echo -e '\nPlease Enter\na Message: '`" message
werden
.
Please Enter
a Message: _
wo produzieren verwenden. ist eine leere erste neue Zeile und _ ist der Cursor.
Nur ein abschließendes Newline Sie \n\b
wie in meinem ersten Beispiel
Einfach mal die genau die gleiche Sache verwenden, um hinzuzufügen.Sie können:
# -r and -e options are unrelated to the answer.
read -rep $'Please Enter a Message:\n' message
Und es funktioniert genau so, wie gefragt:
Please enter a Message:
_
Hier ist ein Auszug aus dem manpage bash es zu erklären:
Wörter von der Form $ 'string "werden besonders behandelt. Das Wort wird auf string erweitert, wobei Zeichen mit umgekehrten Schrägstrichen wie im ANSI C-Standard angegeben ersetzt werden. Backslash Escape-Sequenzen, falls vorhanden, werden dekodiert wie folgt:
- (...)
- \ n neue Zeile
- (...)
Das expandierte Ergebnis ist einzigen -Qoted, als ob das Dollarzeichen nicht vorhanden gewesen wäre.
Ich brauchte eine Weile, um es herauszufinden.
Beachten Sie, dass einfache Anführungszeichen und doppelte Anführungszeichen verhalten sich anders in dieser Hinsicht:
Eine Strings in doppelten Anführungszeichen ein Dollarzeichen ($) voran bewirkt, dass die Zeichenfolge entsprechend der aktuellen locale übersetzt werden. Wenn das Gebietsschema C oder POSIX ist, wird das Dollarzeichen ignoriert. Wenn die Zeichenfolge übersetzt und ersetzt wird, wird die Ersetzung doppelt zitiert.
@ t-j-crowder Dies ist ein besserer Weg, der eine [T.J. Crowder] (http://stackoverflow.com/users/157247/t-j-crowder) wies auf :) – dmitri
Ich mag das. Danke für die Verbesserung meines Wissens –
Was macht '-e' genau? es funktioniert mit mir ohne dass '-e',' -e' nur für mich bewirkt, dass '-s' nicht mehr funktioniert. –
Hier ist eine Verbesserung der akzeptierte Antwort, die benötigt keine Subshell Laichen:
read -p "Please Enter a Message:"$'\n' message
Vom GNU Bash reference manual:
Wörter der Form
$'string'
speziell behandelt werden. Das Wort wird auf Zeichenfolge erweitert, wobei Zeichen mit Backslash-Escapezeichen wie im ANSI C-Standard angegeben ersetzt werden.
Sie könnten in Betracht ziehen, die akzeptierte Antwort auf [diese] (http://stackoverflow.com/a/15696250/1048539) zu aktualisieren, da es weit weniger hacky (und weniger verwirrend für zukünftige Besucher ...) ist. – enderland