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ó echo
có thể khá khó khăn tùy thuộc vào việc thực hiện (không khó như -n
mặc dù).
POSIX.2017 compliant echo
s
POSIX yêu cầu echo -e
đầu ra -e<newline>
. Vì vậy, nó chỉ
echo -e
ở đó Các tuân thủ POSIX echo
liê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
echo
BUILTIN của bash
khi cả xpg_echo
và posix
tù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/sh
của Apple MacOS). set -o posix; shopt -s xpg_echo
( posix
tùy chọn cũng có thể được bật nếu được gọi là sh
hoặc khi POSIXLY_CORRECT
hoặc SHELLOPTS=posix
trong môi trường).
- các
/bin/echo
hệ 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
echo
BUILTIN của dash
, ksh88
, Bourne shell, csh, tcsh, sang trọng, rc, es, akanga
- GNU
echo
( /bin/echo
trên các hệ thống GNU) khi POSIXLY_CORRECT
ở trong môi trường.
- các
echo
BUILTIN của mksh
và một số pdksh-Xuất phát khác khi họ posix
lựa chọn được kích hoạt.
- các
echo
BUILTIN của yash
khi$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 echo
các nghiên cứu Unix V8 (nơi nó xuất phát từ), GNU, busybox, các echo
BUILTIN của bash
, zsh
, pdksh
và các dẫn xuất, fish
một số ash
vỏ dựa trên như busybox sh
hoặc sh
củ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ọ, yash
với$ECHO_STYLE
một trong GNU
hoặ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 echo
là 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/echo
nơi bạn có thể thực hiện:
/bin/echo "$data
\c"
(trong quá trình thực hiện đó, \c
chỉ đượ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 yash
cá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ọ).
echo
thường là một vỏ dựng sẵn, nhưng thường cũng có/usr/bin/echo
. Đây-e
khô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ì?