Linux Bash Shell lido com suporte a guias (\ t)

Oct 16 2020

Há \topção para guia horizontal emecho

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

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

Existe alguma opção semelhante em read?

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

Resultado Desejado

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

Respostas

6 StéphaneChazelas Oct 15 2020 at 23:03

Você sempre pode usar a $'...'forma de aspas no estilo ksh93 que entende essas sequências de escape:

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

( IFS=e -rnão são relevantes, estou apenas adicionando-os aqui, pois chamar readsem eles raramente faz sentido).

Observe que -pnão é uma shfunção padrão . Em ksh / zsh, -pé para ler o co-processo e os prompts são especificados com read 'var?Prompt: '. É uma pena que bashoptou por introduzir uma API incompatível aqui. No -pentanto, você não precisa usar , você pode simplesmente fazer de forma portátil:

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

printfreconhece essas sequências de escape em seu argumento de formato e argumentos para %bespecificadores. Se os echoreconhece (ou aceita uma -eopção para reconhecê-los) depende da implementação e para muitas implementações (incluindo basho embutido) no tempo de construção e nas configurações de tempo de execução, portanto, é melhor evitar .

terdon Oct 15 2020 at 23:02

Você sempre pode simplesmente adicionar 8 espaços:

read -p '        hello '

Mas sim, você também pode obter um caractere de tabulação real:

read -p $'\t''hello '

Ou

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

Ou

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