Seperti yang diamati sebagian besar orang lain, "-n" diartikan secara harfiah jika ditempatkan di mana saja tetapi segera setelah echoperintah.
Secara historis, utilitas UNIX semuanya seperti ini - mereka mencari opsi hanya segera setelah nama perintah. Kemungkinan besar BSD atau GNU yang memelopori gaya yang lebih fleksibel (meskipun saya bisa saja salah), karena bahkan sekarang POSIX menetapkan cara lama sebagai yang benar (lihat Pedoman 9, dan juga man 3 getoptpada sistem Linux). Bagaimanapun, meskipun sebagian besar utilitas Linux saat ini menggunakan gaya baru, ada beberapa ketidaksepakatan seperti echo.
Echoberantakan, standar-bijaksana, dalam bahwa ada setidaknya dua versi yang secara mendasar bertentangan dalam permainan pada saat POSIX muncul. Di satu sisi, Anda memiliki gaya SYSV, yang menafsirkan karakter backslash-lolos tetapi sebaliknya memperlakukan argumennya secara harfiah, tidak menerima opsi. Di sisi lain, Anda memiliki gaya BSD, yang memperlakukan inisial -nsebagai case khusus dan menampilkan benar-benar semua yang lainnya secara harfiah. Dan karena echosangat nyaman, Anda memiliki ribuan skrip shell yang bergantung pada satu perilaku atau yang lain:
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON\'T USE -n -- it\'s not finished! --
Karena semantik "perlakukan semuanya secara harfiah", tidak mungkin bahkan menambahkan opsi baru echotanpa merusak barang-barang. Jika GNU menggunakan skema opsi fleksibel di atasnya, neraka akan hilang.
Kebetulan, untuk kompatibilitas terbaik antara implementasi shell Bourne, gunakan printfdaripadaecho .
DIPERBARUI untuk menjelaskan mengapa echosecara khusus tidak menggunakan opsi yang fleksibel.
echo -n "bar"memberi "bar", sementaraecho "bar" -nmemberi "bar -n"