Linux Bash Shell mit Tab-Unterstützung lesen (\ t)
Es gibt eine \tOption für die horizontale Registerkarte inecho
wolf@linux:~$ echo hello hello wolf@linux:~$
wolf@linux:~$ echo -e '\thello' hello wolf@linux:~$
Gibt es eine ähnliche Option in read?
wolf@linux:~$ read -p 'hello ' hello wolf wolf@linux:~$
wolf@linux:~$ read -p '\thello ' \thello wolf wolf@linux:~$
Gewünschte Ausgabe
wolf@linux:~$ read -p '\thello ' <- need something to produce something like tab or `\t` in `echo` hello wolf wolf@linux:~$
Antworten
Sie können immer die $'...'Form von Anführungszeichen im ksh93-Stil verwenden , die diese Escape-Sequenzen verstehen:
IFS= read -r -p $'\thello ' var
(die IFS=und -rsind nicht relevant, ich füge sie hier nur hinzu, da ein Anruf readohne sie selten Sinn macht).
Beachten Sie, dass dies -pkeine Standardfunktion shist. In ksh / zsh -pist aus dem Co-Prozess zu lesen und Eingabeaufforderungen werden mit angegeben read 'var?Prompt: '. Es ist bedauerlich, dass bashhier eine inkompatible API eingeführt wurde. Sie müssen es jedoch nicht verwenden -p, Sie können es einfach portabel machen:
printf >&2 '\thello '
IFS= read -r var
printferkennt diese Escape-Sequenzen in ihrem Formatargument und Argumenten für %bSpezifizierer. Ob sie echoerkannt werden (oder eine -eOption zum Erkennen akzeptiert ), hängt von der Implementierung und bei vielen Implementierungen (einschließlich bashder integrierten) von der Erstellungszeit und den Laufzeiteinstellungen ab. Dies wird daher am besten vermieden .
Sie können jederzeit einfach 8 Leerzeichen hinzufügen:
read -p ' hello '
Aber ja, Sie können auch ein aktuelles Tabulatorzeichen erhalten:
read -p $'\t''hello '
Oder
read -p "$(echo -e '\thello ')"
Oder
read -p "$(printf '\thello ')"