Linux Bash Shell อ่านด้วยการสนับสนุนแท็บ (\ t)
มี\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:~$
คำตอบ
คุณสามารถใช้$'...'อัญประกาศในรูปแบบ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) เมื่อเวลาในการสร้างและการตั้งค่ารันไทม์เพื่อเป็นหลีกเลี่ยงที่ดีที่สุด
คุณสามารถเพิ่มช่องว่าง 8 ช่องได้เสมอ:
read -p ' hello '
แต่ใช่คุณยังสามารถรับอักขระแท็บจริง:
read -p $'\t''hello '
หรือ
read -p "$(echo -e '\thello ')"
หรือ
read -p "$(printf '\thello ')"