Wenn Sie eine ganze Zeile mit Plain read
(oder read -r
anderen Optionen, die dieses Verhalten nicht beeinflussen) lesen, erkennt der vom Kernel bereitgestellte Zeileneditor den BackspaceSchlüssel zum Löschen eines Zeichens sowie einige andere Befehle (einschließlich Returnzum Beenden der Eingabe) Linie und senden Sie es). Die Tastenkombinationen können mit dem Dienstprogramm konfiguriert werdenstty
. Das Terminal befindet sich im gekochten Modus, wenn sein Zeileneditor aktiv ist. Im Raw-Modus wird jedes auf der Tastatur eingegebene Zeichen sofort an die Anwendung übertragen. Im gekochten Modus werden die Zeichen in einem Puffer gespeichert und nur vollständige Zeilen an die Anwendung übertragen.
Um das Lesen nach einer festgelegten Anzahl von Zeichen zu beenden read -n
, muss Bash in den Raw-Modus wechseln. Im Raw-Modus verarbeitet das Terminal die BackspaceTaste nicht (zum Zeitpunkt des Drückens Backspacewurde das vorhergehende Zeichen bereits an bash gesendet), und bash führt auch keine Verarbeitung durch (vermutlich, weil dies die größere Flexibilität bietet dem Skript zu erlauben, seine eigene Verarbeitung durchzuführen).
Sie können die Option übergeben -e
, um den eigenen Zeileneditor von bash zu aktivieren (readline, ein geeigneter Zeileneditor, der dem extrem groben des Kernels nicht ähnlich ist). Da bash die Zeilenausgabe ausführt, kann es das Lesen beenden, sobald es die angeforderte Anzahl von Zeichen hat.
Gilles 'SO - hör auf böse zu sein'
quelle
read
die 'Anzahl der eingegebenen Zeichen' gelesen wird, bleibt immer noch unbeantwortet.