Linux Bash Shell do odczytu z obsługą kart (\ t)
Istnieje \topcja zakładki poziomej wecho
wolf@linux:~$ echo hello hello wolf@linux:~$
wolf@linux:~$ echo -e '\thello' hello wolf@linux:~$
Czy jest jakaś podobna opcja read?
wolf@linux:~$ read -p 'hello ' hello wolf wolf@linux:~$
wolf@linux:~$ read -p '\thello ' \thello wolf wolf@linux:~$
Pożądane wyjście
wolf@linux:~$ read -p '\thello ' <- need something to produce something like tab or `\t` in `echo` hello wolf wolf@linux:~$
Odpowiedzi
Zawsze możesz użyć cytatów w stylu ksh93, $'...'które rozumieją te sekwencje specjalne:
IFS= read -r -p $'\thello ' var
( IFS=i -rnie są istotne, po prostu dodaję je tutaj, ponieważ dzwonienie readbez nich rzadko ma sens).
Zauważ, że -pnie jest to standardowa shfunkcja. W ksh / zsh, -pczyta z koprocesu, a podpowiedzi są określane za pomocą read 'var?Prompt: '. Szkoda, że bashzdecydowaliśmy się wprowadzić tutaj niezgodny interfejs API. Nie musisz jednak używać -p, możesz po prostu zrobić przenośnie:
printf >&2 '\thello '
IFS= read -r var
printfrozpoznaje te sekwencje ucieczki w swoim argumencie format i argumenty dla %bspecyfikatorów. To, czy echoje rozpoznaje (lub akceptuje -eopcję ich rozpoznania), zależy od implementacji i dla wielu implementacji (w tym bashwbudowanych) od czasu kompilacji i ustawień czasu wykonania, więc najlepiej tego unikać .
Zawsze możesz po prostu dodać 8 spacji:
read -p ' hello '
Ale tak, możesz również uzyskać rzeczywisty znak tabulacji:
read -p $'\t''hello '
Lub
read -p "$(echo -e '\thello ')"
Lub
read -p "$(printf '\thello ')"