Mặc dù giải pháp rõ ràng, tiêu chuẩn và được khuyến nghị là sử dụng printf, để thực hiện nó echocó thể khá khó khăn tùy thuộc vào việc thực hiện (không khó như -nmặc dù).
POSIX.2017 compliant echos
POSIX yêu cầu echo -e đầu ra -e<newline>. Vì vậy, nó chỉ
echo -e
ở đó Các tuân thủ POSIX echoliên quan đến vấn đề đó (hầu hết trong số chúng không tuân thủ POSIX về các khía cạnh khác, thông số POSIX gần như vô dụng khi nói đến echo) bao gồm:
- các
echoBUILTIN của bashkhi cả xpg_echovà posixtùy chọn đã được kích hoạt (trong thời gian chạy hoặc thời gian xây dựng như cho /bin/shcủa Apple MacOS). set -o posix; shopt -s xpg_echo( posixtùy chọn cũng có thể được bật nếu được gọi là shhoặc khi POSIXLY_CORRECThoặc SHELLOPTS=posixtrong môi trường).
- các
/bin/echohệ thống UNIX được chứng nhận (ít nhất là AIX, macOS, Solaris) và hầu hết các BSD
- các
echoBUILTIN của dash, ksh88, Bourne shell, csh, tcsh, sang trọng, rc, es, akanga
- GNU
echo( /bin/echotrên các hệ thống GNU) khi POSIXLY_CORRECTở trong môi trường.
- các
echoBUILTIN của mkshvà một số pdksh-Xuất phát khác khi họ posixlựa chọn được kích hoạt.
- các
echoBUILTIN của yashkhi$ECHO_STYLE là một trong hai unset hoặc một trong SYSV, XSI, BSD, DASH,RAW
triển khai hỗ trợ -e
Bao gồm echocác nghiên cứu Unix V8 (nơi nó xuất phát từ), GNU, busybox, các echoBUILTIN của bash, zsh, pdkshvà các dẫn xuất, fishmột số ashvỏ dựa trên như busybox shhoặc shcủa một số BSDs, các phiên bản gần đây của ksh93(trên một số hệ thống, và với một số giá trị của $PATH) với cài đặt mặc định của họ, yashvới$ECHO_STYLE một trong GNUhoặc ZSH:
echo -e '-e\n\c'
Việc triển khai hỗ trợ -e luôn luôn hỗ trợ -n, vì vậy:
echo -ne '-e\n'
cũng sẽ làm việc
zsh
zshĐây echolà triển khai duy nhất mà tôi biết hỗ trợ điểm đánh dấu kết thúc tùy chọn ( -).
echo - -e
Làm cho nó trở thành vỏ giống như Bourne echo có thể xuất dữ liệu tùy ý (cũng bởi vì nó là lớp duy nhất hỗ trợ các byte NUL trong các biến của nó và các đối số của phần tử dựng sẵn) với echo -E - "$data")
Ngoại trừ vấn đề NUL byte, các triển khai khác có thể xuất dữ liệu tùy ý là FreeBSD hoặc macOS /bin/echonơi bạn có thể thực hiện:
/bin/echo "$data
\c"
(trong quá trình thực hiện đó, \cchỉ được nhận ra ở cuối và không có chuỗi thoát nào khác được hỗ trợ).
Và yash:
ECHO_STYLE=RAW echo "$data"
(mặc dù lưu ý rằng yashcác biến chỉ có thể giữ văn bản, chuỗi byte, vì thế không tùy ý trong miền địa phương nơi không phải tất cả các chuỗi byte có thể hình thành ký tự hợp lệ như thế nào trong những người sử dụng UTF-8 như charmap của họ).
echothường là một vỏ dựng sẵn, nhưng thường cũng có/usr/bin/echo. Đây-ekhông phải là POSIX, nhưng có sẵn, ví dụ như với bash. Vui lòng cung cấp thêm chi tiết về ý nghĩa của bạn với 'chúng vẫn không hoạt động'. Hành vi dự kiến là gì?