Linux Bash Shell mit Tab-Unterstützung lesen (\ t)

Oct 16 2020

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

6 StéphaneChazelas Oct 15 2020 at 23:03

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 .

terdon Oct 15 2020 at 23:02

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 ')"