Sementara solusi yang jelas, standar, dan yang direkomendasikan adalah menggunakan printf
, melakukannya dengan echo
bisa sangat rumit tergantung pada implementasinya (tidak sesulit seperti -n
saat ini).
Sesuai POSIX.2017 echo
s
POSIX membutuhkan echo -e
output -e<newline>
. Jadi itu adil
echo -e
sana. Sesuai dengan POSIX echo
dalam hal itu (kebanyakan dari mereka tidak sesuai dengan POSIX dalam hal lain, spesifikasi POSIX hampir tidak berguna ketika menyangkut echo
) meliputi:
- yang
echo
builtin dari bash
ketika kedua xpg_echo
dan posix
pilihan telah diaktifkan (pada saat runtime atau membangun waktu seperti untuk /bin/sh
Apple MacOS). set -o posix; shopt -s xpg_echo
( posix
opsi ini juga dapat diaktifkan jika dipanggil saat sh
atau ketika POSIXLY_CORRECT
atau SHELLOPTS=posix
di lingkungan).
- yang
/bin/echo
sistem bersertifikat UNIX (AIX, MacOS, Solaris setidaknya) dan paling BSD
- yang
echo
builtin dari dash
, ksh88
, Bourne shell, csh, tcsh, mewah, rc, es, akanga
- GNU
echo
( /bin/echo
pada sistem GNU) saat POSIXLY_CORRECT
berada di lingkungan.
- yang
echo
builtin dari mksh
dan beberapa pdksh-atau diperoleh lain ketika mereka posix
pilihan diaktifkan.
- yang
echo
builtin dari yash
saat $ECHO_STYLE
ini baik disetel atau salah SYSV
, XSI
, BSD
, DASH
,RAW
implementasi yang mendukung -e
Termasuk echo
penelitian Unix V8 (dari mana asalnya), GNU, busybox, yang echo
builtin dari bash
, zsh
, pdksh
dan turunannya, fish
, beberapa ash
kerang berbasis seperti busybox sh
atau sh
beberapa BSD, versi terbaru ksh93
(pada beberapa sistem, dan dengan beberapa nilai $PATH
) dengan pengaturan default mereka, yash
dengan $ECHO_STYLE
salah satu GNU
atau ZSH
:
echo -e '-e\n\c'
Implementasi yang mendukung -e
selalu mendukung -n
, jadi:
echo -ne '-e\n'
akan bekerja juga.
zsh
zsh
Ini echo
adalah satu-satunya implementasi yang saya tahu bahwa mendukung end-of-opsi penanda ( -
).
echo - -e
Menjadikannya satu-satunya shell mirip Bourne echo
yang dapat menampilkan data sewenang-wenang (juga karena itu satu-satunya yang mendukung byte NUL dalam variabel dan argumen bawaannya) dengan echo -E - "$data"
)
Kecuali untuk masalah NUL-byte, implementasi lain yang dapat menampilkan data sewenang-wenang adalah FreeBSD atau macOS di /bin/echo
mana Anda dapat melakukan:
/bin/echo "$data
\c"
(dalam implementasi itu, \c
hanya dikenali pada akhirnya, dan tidak ada urutan escape lainnya yang didukung).
Dan ini yash
:
ECHO_STYLE=RAW echo "$data"
(meskipun perhatikan bahwa yash
variabel hanya dapat menampung teks, jadi bukan urutan byte acak di lokal di mana tidak semua urutan byte dapat membentuk karakter yang valid seperti pada mereka yang menggunakan UTF-8 sebagai charmap mereka).
echo
biasanya shell builtin, tetapi biasanya juga ada/usr/bin/echo
. Ini-e
bukan POSIX, tetapi tersedia misalnya dengan bash. Tolong beri lebih detail apa yang Anda maksud dengan 'mereka masih tidak berfungsi'. Apa perilaku yang diharapkan?