Linux Bash Shell, sekme destekli okuma (\ t)

Oct 16 2020

İçinde \tyatay sekme seçeneği varecho

wolf@linux:~$ echo hello hello wolf@linux:~$ 

wolf@linux:~$ echo -e '\thello' hello wolf@linux:~$ 

İçinde benzer bir seçenek var readmı?

wolf@linux:~$ read -p 'hello ' hello wolf wolf@linux:~$ 
wolf@linux:~$ read -p '\thello ' \thello wolf wolf@linux:~$ 

Istenilen çıktı

wolf@linux:~$ read -p '\thello ' <- need something to produce something like tab or `\t` in `echo` hello wolf wolf@linux:~$ 

Yanıtlar

6 StéphaneChazelas Oct 15 2020 at 23:03

Bu $'...'kaçış dizilerini anlayan ksh93 tarzı alıntı biçimini her zaman kullanabilirsiniz :

IFS= read -r -p $'\thello ' var

( IFS=ve -ralakalı değil, sadece onları buraya ekliyorum çünkü readonlarsız arama nadiren mantıklı geliyor)

Bunun -pstandart bir shişlev olmadığını unutmayın . Ksh / zsh, -portak işlemden okumaktır ve istemler ile belirtilir read 'var?Prompt: '. Burada bashuyumsuz bir API sunmayı seçen talihsiz bir durum . -pYine de kullanmak zorunda değilsin , sadece taşınabilir bir şekilde yapabilirsin:

printf >&2 '\thello '
IFS= read -r var

printfbiçim bağımsız değişkeninde bu kaçış dizilerini ve %bbelirticiler için bağımsız değişkenleri tanır . İster echoonları tanır (veya kabul -etanıyabilmesi için seçenek) uygulanmasına bağlıdır ve (dahil birçok uygulamaları için bashinşa süresi ve çalışma zamanı ayarlara 'ın yerleşiğini), böyledir iyi kaçınılmalıdır .

terdon Oct 15 2020 at 23:02

Her zaman basitçe 8 boşluk ekleyebilirsiniz:

read -p '        hello '

Ama evet, gerçek bir sekme karakteri de elde edebilirsiniz:

read -p $'\t''hello '

Veya

read -p "$(echo -e '\thello ')"

Veya

read -p "$(printf '\thello ')"