Ich muss einen Wert vom Terminal in einem Bash-Skript lesen. Ich möchte in der Lage sein, einen Standardwert anzugeben, den der Benutzer ändern kann.
# Please enter your name: Ricardo^
In diesem Skript lautet die Eingabeaufforderung "Bitte geben Sie Ihren Namen ein:". Der Standardwert ist "Ricardo" und der Cursor befindet sich hinter dem Standardwert. Gibt es eine Möglichkeit, dies in einem Bash-Skript zu tun?
input
und dann verwendenname=${input:-$name}
.name=${!input:-$name}
tun?$1
wird${1:-some_default_string}
quelle
-e
dies obligatorisch zu sein scheint, um-i
tatsächlich arbeiten zu könnenIn Bash 4:
Dies zeigt den Namen nach der Eingabeaufforderung wie folgt an:
mit dem Cursor am Ende des Namens und ermöglicht dem Benutzer, ihn zu bearbeiten. Die letzte Zeile ist optional und erzwingt, dass der Name der ursprüngliche Standardwert ist, wenn der Benutzer die Eingabe oder den Standardwert löscht (Übermittlung einer Null).
quelle
name
stattinput
imread
Befehl.$name
bleibt der Wert von erhalten, wenn der Benutzer den vorgeschlagenen Wert löscht (und somit eine Nullzeichenfolge eingibt). Es hängt alles davon ab, was Sie brauchen. Das habe ich in meiner Antwort gesagt. Sie haben jedoch Recht, dass ich expliziter hätte sein können und gesagt habe, dass die Variable hätte sein können, wenn die optionale Zeile nicht verwendet worden wärename
.Code:
Probelauf:
quelle
Ich fand diese Frage und suchte nach einer Möglichkeit, etwas zu präsentieren wie:
Anhand der obigen Beispiele folgerte ich Folgendes: -
Ich hoffe, das hilft jemandem, nicht über die Logik nachdenken zu müssen, wenn er auf dasselbe Problem stößt
quelle
Ich habe gerade dieses Muster verwendet, das ich bevorzuge:
quelle
Legen Sie die Standardeinstellung fest. Druck es; einen neuen Wert lesen; Wenn es einen neuen Wert gibt, verwenden Sie ihn anstelle des Standardwerts. Es gibt (oder gab) einige Unterschiede zwischen Shells und Systemen, wie eine neue Zeile am Ende einer Eingabeaufforderung unterdrückt werden kann. Die '\ c'-Notation scheint unter MacOS X 10.6.3 mit einem 3.x-Bash zu funktionieren und funktioniert mit den meisten von System V abgeleiteten Unix-Varianten unter Verwendung von Bourne- oder Korn-Shells.
Beachten Sie auch, dass der Benutzer wahrscheinlich nicht erkennen würde, was sich hinter den Kulissen abspielt. Ihre neuen Daten werden nach dem Namen eingegeben, der bereits auf dem Bildschirm angezeigt wird. Es könnte besser sein, es zu formatieren:
quelle
printf
ist tragbarer alsecho
if (test -z "$xxx"); ...
' und andere C-Shellismen zu reparieren.\c
, da es auch unterstütztecho -n
! Sie müssen jedoch hinzufügen-e
, um das Bash-Echo für die Interpretation von Escape-Zeichen zu erhalten. Ich denke,\c
ist für Dinge, die nicht gesagt werden:echo -e "Syntax slightly off\c, but I've learned so much from what you've shared. Thanks, @JonathanLeffler!"
quelle
Die Parameter -e und -t funktionieren nicht zusammen. Ich habe einige Ausdrücke ausprobiert und das Ergebnis war das folgende Code-Snippet:
quelle
;)
. Dies ist auf SO erlaubt! aber wir wollen andere Fragen nicht mit nicht verwandten Dingen verschmutzen.