Linux Bash Shell อ่านด้วยการสนับสนุนแท็บ (\ t)

Oct 16 2020

มี\tตัวเลือกสำหรับแท็บแนวนอนในecho

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

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

มีตัวเลือกที่คล้ายกันในread?

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

ผลลัพธ์ที่ต้องการ

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

คำตอบ

6 StéphaneChazelas Oct 15 2020 at 23:03

คุณสามารถใช้$'...'อัญประกาศในรูปแบบksh93 ที่เข้าใจลำดับการหลีกเหล่านั้นได้เสมอ:

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

( IFS=และ-rไม่เกี่ยวข้องฉันแค่เพิ่มพวกเขาที่นี่เป็นการโทรreadโดยที่พวกเขาไม่ค่อยสมเหตุสมผล)

โปรดทราบว่า-pไม่ใช่shฟังก์ชันมาตรฐาน ใน ksh / zsh, คือการอ่านจากผู้ร่วมกระบวนการและการแจ้งที่ระบุไว้ด้วย-p read 'var?Prompt: 'โชคไม่ดีที่bashเลือกที่จะแนะนำ API ที่เข้ากันไม่ได้ที่นี่ คุณไม่จำเป็นต้องใช้-pแต่คุณสามารถพกพาได้:

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

printfไม่รู้จักลำดับการหลีกเลี่ยงเหล่านั้นในอาร์กิวเมนต์รูปแบบและอาร์กิวเมนต์สำหรับตัว%bระบุ ไม่ว่าจะechoตระหนักถึงพวกเขา (หรือยอมรับ-eตัวเลือกที่จะรู้จักพวกเขา) ขึ้นอยู่กับการดำเนินงานและการใช้งานสำหรับหลายคน (รวมทั้งbash's builtin) เมื่อเวลาในการสร้างและการตั้งค่ารันไทม์เพื่อเป็นหลีกเลี่ยงที่ดีที่สุด

terdon Oct 15 2020 at 23:02

คุณสามารถเพิ่มช่องว่าง 8 ช่องได้เสมอ:

read -p '        hello '

แต่ใช่คุณยังสามารถรับอักขระแท็บจริง:

read -p $'\t''hello '

หรือ

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

หรือ

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