Linux Bash Shell đọc với hỗ trợ tab (\ t)

Oct 16 2020

Có \ttùy chọn cho tab ngang trongecho

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

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

Có tùy chọn nào tương tự trong readkhông?

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

Sản phẩm chất lượng

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

Trả lời

6 StéphaneChazelas Oct 15 2020 at 23:03

Bạn luôn có thể sử dụng $'...'dạng dấu ngoặc kép kiểu ksh93 để hiểu các chuỗi thoát đó:

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

(cái IFS=và -rkhông liên quan, tôi chỉ thêm chúng ở đây vì việc gọi readmà không có chúng hiếm khi có ý nghĩa).

Lưu ý rằng đó -pkhông phải là một shchức năng tiêu chuẩn . Trong ksh / zsh, -plà để đọc từ quá trình đồng và các lời nhắc được chỉ định với read 'var?Prompt: '. Thật không may khi bashđã chọn giới thiệu một API không tương thích ở đây. -pTuy nhiên, bạn không cần phải sử dụng , bạn có thể thực hiện một cách linh hoạt:

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

printfkhông nhận ra các chuỗi thoát đó trong đối số định dạng của nó và đối số cho các từ %bchỉ định. Việc echonhận ra chúng (hoặc chấp nhận một -etùy chọn để nhận ra chúng) phụ thuộc vào việc triển khai và đối với nhiều triển khai (bao gồm cả bashnội trang) trên cài đặt thời gian xây dựng và thời gian chạy, vì vậy tốt nhất là nên tránh .

terdon Oct 15 2020 at 23:02

Bạn luôn có thể chỉ cần thêm 8 dấu cách:

read -p '        hello '

Nhưng có, bạn cũng có thể nhận được một ký tự tab thực tế:

read -p $'\t''hello '

Hoặc là

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

Hoặc là

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