Sementara solusi yang jelas, standar, dan yang direkomendasikan adalah menggunakan printf, melakukannya dengan echobisa sangat rumit tergantung pada implementasinya (tidak sesulit seperti -nsaat ini).
Sesuai POSIX.2017 echos
POSIX membutuhkan echo -e output -e<newline>. Jadi itu adil
echo -e
sana. Sesuai dengan POSIX echodalam hal itu (kebanyakan dari mereka tidak sesuai dengan POSIX dalam hal lain, spesifikasi POSIX hampir tidak berguna ketika menyangkut echo) meliputi:
- yang
echobuiltin dari bashketika kedua xpg_echodan posixpilihan telah diaktifkan (pada saat runtime atau membangun waktu seperti untuk /bin/shApple MacOS). set -o posix; shopt -s xpg_echo( posixopsi ini juga dapat diaktifkan jika dipanggil saat shatau ketika POSIXLY_CORRECTatau SHELLOPTS=posixdi lingkungan).
- yang
/bin/echosistem bersertifikat UNIX (AIX, MacOS, Solaris setidaknya) dan paling BSD
- yang
echobuiltin dari dash, ksh88, Bourne shell, csh, tcsh, mewah, rc, es, akanga
- GNU
echo( /bin/echopada sistem GNU) saat POSIXLY_CORRECTberada di lingkungan.
- yang
echobuiltin dari mkshdan beberapa pdksh-atau diperoleh lain ketika mereka posixpilihan diaktifkan.
- yang
echobuiltin dari yashsaat $ECHO_STYLEini baik disetel atau salah SYSV, XSI, BSD, DASH,RAW
implementasi yang mendukung -e
Termasuk echopenelitian Unix V8 (dari mana asalnya), GNU, busybox, yang echobuiltin dari bash, zsh, pdkshdan turunannya, fish, beberapa ashkerang berbasis seperti busybox shatau shbeberapa BSD, versi terbaru ksh93(pada beberapa sistem, dan dengan beberapa nilai $PATH) dengan pengaturan default mereka, yashdengan $ECHO_STYLEsalah satu GNUatau ZSH:
echo -e '-e\n\c'
Implementasi yang mendukung -eselalu mendukung -n, jadi:
echo -ne '-e\n'
akan bekerja juga.
zsh
zshIni echoadalah satu-satunya implementasi yang saya tahu bahwa mendukung end-of-opsi penanda ( -).
echo - -e
Menjadikannya satu-satunya shell mirip Bourne echoyang 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/echomana Anda dapat melakukan:
/bin/echo "$data
\c"
(dalam implementasi itu, \chanya dikenali pada akhirnya, dan tidak ada urutan escape lainnya yang didukung).
Dan ini yash:
ECHO_STYLE=RAW echo "$data"
(meskipun perhatikan bahwa yashvariabel 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).
echobiasanya shell builtin, tetapi biasanya juga ada/usr/bin/echo. Ini-ebukan POSIX, tetapi tersedia misalnya dengan bash. Tolong beri lebih detail apa yang Anda maksud dengan 'mereka masih tidak berfungsi'. Apa perilaku yang diharapkan?