Jawaban yang Anda temukan di Stack Exchange benar dan tutorial ini salah. Anda dapat bereksperimen sendiri atau mencarinya di standar . Set IFS
tidak sama dengan mengaturnya ke nilai default space-tab-newline, sementara yang kosong IFS
secara efektif mematikan pemisahan bidang.
Anda dapat membaca halaman Sven Mascheck tentang IFS tentang implementasi historis. Beberapa cangkang historis tidak suka unset IFS
, dan versi ksh yang sangat lama memperlakukannya seperti IFS
cangkang kosong tetapi semua cangkang modern dan kebanyakan cangkang lama memperlakukan yang belum disetel IFS
seperti nilai default.
Anda tidak boleh memulai skrip IFS=
Anda kecuali jika Anda ingin mematikan pemisahan bidang (yang bisa menjadi keputusan yang masuk akal - tetapi perhatikan bahwa Anda masih perlu menempatkan tanda kutip ganda di sekitar pengganti untuk menghindari globbing, kecuali jika Anda mematikannya set -f
juga). Untuk mengatur ulang nilai default, gunakan unset IFS
. Masih bisa diperdebatkan apakah ini berguna di awal skrip; ada banyak hal buruk lainnya seperti cerdik PATH
yang dapat dilakukan penelepon untuk membuat skrip Anda salah.
Tutorial ini juga menyarankan untuk mengatur ulang PATH
. Ini biasanya saran yang buruk. Dalam kebanyakan kasus, Anda tidak dapat memprediksi apa jalur pencarian yang benar, tetapi pengguna tahu. Bagaimana Anda tahu apakah ada /usr/local/bin
atau /home/bob/bin
mengandung versi utilitas yang diperbaiki bug pada unix kuno di mana yang ada di dalamnya /usr/bin
bermasalah? Apakah Anda benar-benar ingin menanamkan semua logika untuk mencari tahu apakah akan menempatkan /usr/xpg6/bin
depan /bin
? Pada posisi apa yang Anda inginkan /usr/gnu/bin
? Jangan mengatur ulang PATH kecuali skrip Anda menargetkan sistem tertentu.
Saya belum membaca tutorial ini, tetapi saya memang memeriksa satu hal: itu tidak memberitahu Anda sejak awal untuk selalu menempatkan tanda kutip ganda di sekitar substitusi variabel dan substitusi perintah. Jadi saya tidak berpikir tutorial ini bagus.
unset IFS
tidak mereset IFS ke nilai defaultnya di bash meskipun itu mengatur ulang pemisahan bidang.