Linux Bash Shell dibaca dengan dukungan tab (\ t)

Oct 16 2020

Ada \topsi untuk tab horizontal diecho

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

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

Apakah ada opsi serupa read?

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

Output yang Diinginkan

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

Jawaban

6 StéphaneChazelas Oct 15 2020 at 23:03

Anda selalu dapat menggunakan $'...'bentuk tanda kutip gaya ksh93 yang memahami urutan pelolosan tersebut:

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

( IFS=dan -rtidak relevan, saya hanya menambahkannya di sini sebagai panggilan readtanpa mereka jarang masuk akal).

Perhatikan bahwa -pitu bukan shfungsi standar . Dalam ksh / zsh, -padalah membaca dari proses bersama dan prompt ditentukan dengan read 'var?Prompt: '. Sangat disayangkan bashmemilih untuk memperkenalkan API yang tidak kompatibel di sini. Anda tidak harus menggunakan -p, Anda bisa melakukannya dengan mudah:

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

printfmengenali urutan escape tersebut dalam argumen formatnya, dan argumen untuk %bpenentu. Apakah echomengenalinya (atau menerima -eopsi untuk mengenalinya) bergantung pada implementasi dan untuk banyak implementasi (termasuk bashbawaan) pada pengaturan waktu pembuatan dan runtime, jadi sebaiknya dihindari .

terdon Oct 15 2020 at 23:02

Anda selalu dapat menambahkan 8 spasi:

read -p '        hello '

Tapi ya, Anda juga bisa mendapatkan karakter tab yang sebenarnya:

read -p $'\t''hello '

Atau

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

Atau

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