echo
Sebuah echo
implementasi yang ketat sesuai dengan Single Unix Specification akan menambahkan baris baru jika Anda lakukan:
echo 'line1\nline2'
Tapi itu bukan perilaku yang bisa diandalkan. Sebenarnya, sebenarnya tidak ada perilaku standar yang dapat Anda harapkan echo
.
Operan
string
String yang akan ditulis ke output standar. Jika operan pertama adalah -n
, atau jika salah satu operan berisi karakter < \
backslash> , hasilnya ditentukan-implementasi .
Pada sistem konforman XSI , jika operan pertama -n
, itu harus diperlakukan sebagai string, bukan opsi . Urutan karakter berikut harus diakui pada sistem yang sesuai dengan XSI dalam salah satu argumen:
\a
- Tulis <alert> .
\b
- Tulis <backspasi> .
\c
- Menekan <newline> yang jika tidak mengikuti argumen terakhir di output. Semua karakter yang mengikuti \c
argumen akan diabaikan.
\f
- Tulis <form-feed> .
\n
- Tulis <newline> .
\r
- Tulis <carriage-return> .
\t
- Tulis <tab> .
\v
- Tuliskan <vertical-tab> .
\\
- Tulis karakter <backslash> .
\0num
- Tulis nilai 8-bit yang merupakan angka oktal nol, satu, dua, atau tiga digit num
.
Jadi sebenarnya tidak ada cara umum untuk mengetahui cara menulis baris baru echo
, kecuali bahwa Anda biasanya dapat mengandalkan melakukannya echo
.
Sebuah bash
shell biasanya tidak tidak sesuai dengan spesifikasi, dan menangani -n
dan pilihan lain, tapi bahkan yang tidak pasti. Anda dapat melakukan:
shopt -s xpg_echo
echo hey\\nthere
hey
there
Dan bahkan itu tidak perlu jika bash
telah dibangun dengan opsi waktu bangun ...
--enable-xpg-echo-default
Jadikan echo
bawaan mengembangkan karakter backslash-escaped secara default, tanpa memerlukan -e
opsi. Ini menetapkan nilai default dari xpg_echo
opsi shell on
, yang membuat Bash echo
berperilaku lebih seperti versi yang ditentukan dalam Spesifikasi Unix Tunggal, versi 3. Lihat Bash Builtins , untuk deskripsi tentang urutan melarikan diri yang echo
mengenali.
printf
Di sisi lain, printf
perilaku cukup jinak dibandingkan.
ALASAN
The printf
utilitas ditambahkan untuk menyediakan fungsionalitas yang secara historis telah disediakan oleh echo
. Namun, karena perbedaan yang tak dapat didamaikan dalam berbagai versi yang echo
masih ada, versi ini memiliki beberapa fitur khusus, meninggalkan mereka ke printf
utilitas baru ini , yang didasarkan pada satu di sistem Edisi Kesembilan.
Bagian DIPERLUASKAN DESKRIPSI hampir sama persis dengan printf()
fungsi dalam standar ISO C, meskipun dijelaskan dalam hal notasi format file dalam Notasi Format File XBD .
Ini menangani format string yang menggambarkan argumennya - yang bisa berupa banyak hal, tetapi untuk string cukup banyak baik %b
string yte atau %s
tring literal . Selain dari %f
ormats di argumen pertama, itu berperilaku paling seperti %b
argumen string yte, kecuali bahwa itu tidak menangani jalan \c
keluar.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Lihat Mengapa printf
lebih baik daripada echo
? untuk lebih.
echo() printf
Anda dapat menulis sesuai standar Anda sendiri echo
seperti ...
echo(){
printf '%b ' "$@\n\c"
}
... yang seharusnya selalu melakukan hal yang benar secara otomatis.
Sebenarnya, tidak ... Itu mencetak literal \n
di bagian akhir argumen jika argumen terakhir berakhir dengan jumlah ganjil <backslashes> .
Tetapi ini tidak:
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echo
wajib? Anda dapat menggunakanprintf
.