Saya memiliki skrip bash yang memiliki banyak echo
pernyataan dan juga saya alias echo
untuk echo -e
keduanya di .bash_profile
dan .bashrc
, sehingga baris baru dicetak dengan benar untuk pernyataan seperti echo 'Hello\nWorld'
keluaran harus
Hello
World
tapi output yang saya dapatkan adalah
Hello\nWorld
Saya bahkan mencoba menggunakan shopt -s expand_aliases
dalam skrip, itu tidak membantu
Saya menjalankan skrip saya sebagai bash /scripts/scriptnm.sh
; jika saya menjalankannya karena . /scripts/scriptnm.sh
saya mendapatkan output yang diinginkan ...
echo
seperti yang Anda inginkan adalah praktik buruk IMHOJawaban:
Sejarah campuran
echo
cara operasi standar bervariasi dari shell ke shell. POSIX menentukan bahwa hasilnyaecho
adalah "implementasi-didefinisikan" jika argumen pertama adalah-n
atau argumen apa pun mengandung backslash.Lebih dapat diandalkan untuk digunakan
printf
(baik sebagai perintah bawaan atau perintah eksternal) di mana perilaku lebih didefinisikan: backslash C-style lolos dan penentu format didukung dalam string format (argumen pertama).Anda dapat mengontrol perluasan urutan escape backslash dari pesta ‘s
echo
built-in perintah denganxpg_echo
opsi shell.Atur di bagian atas skrip bash untuk membuat
echo
secara otomatis memperluas backslash lolos tanpa harus menambahkan-e
ke setiap perintah gema.sumber
Saat Anda menggunakan
bash myfile.sh
, Bash dijalankan dalam mode "batch", pada proses yang terpisah , dan tidak membaca profilnya atau rcfile.Ketika Anda menggunakan
. myfile.sh
, file tersebut bersumber dari proses shell saat ini (seolah-olah isinya diketik oleh Anda), karena itu ia melihat alias yang saat ini Anda tetapkan.Secara umum, itu adalah ide yang sangat buruk untuk menulis skrip yang bergantung pada konfigurasi shell tertentu, terutama alias, kecuali jika Anda mendefinisikannya dalam skrip itu sendiri. ( Jangan pernah mengandalkan pengguna
.bashrc
, meskipun itu milik Anda sendiri.)sumber
Praktik yang disarankan adalah untuk digunakan
printf
untuk semua skrip baru.sumber
Ini berfungsi dengan baik di terminal
simpan ke file dan buat itu exeutable (chmod + x) itu
jalankan sebagai ./your_file
sumber