echo
Sebuah echoimplementasi 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 \cargumen 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 bashshell biasanya tidak tidak sesuai dengan spesifikasi, dan menangani -ndan 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 bashtelah dibangun dengan opsi waktu bangun ...
--enable-xpg-echo-default
Jadikan echobawaan mengembangkan karakter backslash-escaped secara default, tanpa memerlukan -eopsi. Ini menetapkan nilai default dari xpg_echoopsi shell on, yang membuat Bash echoberperilaku lebih seperti versi yang ditentukan dalam Spesifikasi Unix Tunggal, versi 3. Lihat Bash Builtins , untuk deskripsi tentang urutan melarikan diri yang echomengenali.
printf
Di sisi lain, printfperilaku cukup jinak dibandingkan.
ALASAN
The printfutilitas ditambahkan untuk menyediakan fungsionalitas yang secara historis telah disediakan oleh echo. Namun, karena perbedaan yang tak dapat didamaikan dalam berbagai versi yang echomasih ada, versi ini memiliki beberapa fitur khusus, meninggalkan mereka ke printfutilitas 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 %bstring yte atau %string literal . Selain dari %formats di argumen pertama, itu berperilaku paling seperti %bargumen string yte, kecuali bahwa itu tidak menangani jalan \ckeluar.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Lihat Mengapa printflebih baik daripada echo? untuk lebih.
echo() printf
Anda dapat menulis sesuai standar Anda sendiri echoseperti ...
echo(){
printf '%b ' "$@\n\c"
}
... yang seharusnya selalu melakukan hal yang benar secara otomatis.
Sebenarnya, tidak ... Itu mencetak literal \ndi 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
echowajib? Anda dapat menggunakanprintf.