
Bash array seringkali membingungkan bagi pemula, terutama saat berurusan dengan ekspansi array dan pemisahan kata (word splitting). Perbedaan antara menggunakan tanda kutip dan tanpa tanda kutip saat memperluas array bisa menghasilkan output yang berbeda dan tidak terduga.
Misalnya, array my_arr=("one a" "two b") jika diperluas tanpa tanda kutip ${my_arr[@]} menghasilkan empat item. Namun jika menggunakan tanda kutip "${my_arr[@]}", hanya dua item yang dihasilkan. Hal ini terjadi karena proses yang disebut word splitting yang akan dijelaskan berikut ini.
Memahami For Loop dan Array di Bash
Untuk memahami perilaku array, penting memahami for loop di Bash. Contohnya, perulangan for item in "${my_arr[@]}" akan mengiterasi tiap elemen array sebagai unit tunggal — dalam kasus ini "one a" dan "two b". Variabel item berperan sebagai iterator yang menerima setiap elemen secara berurutan.
Definisi "kata" dalam Bash berbeda dari pengertian bahasa natural. Bash menganggap kata sebagai rangkaian karakter yang diproses sebagai satu kesatuan. Oleh karena itu, meski ada spasi, elemen array dalam tanda kutip dianggap satu kata Bash.
Parameter Expansion dan Perilaku Array
Parameter expansion di Bash mengubah variabel menjadi nilai yang sebenarnya. Ekspansi "${my_arr[@]}" akan menghasilkan elemen-elemen terpisah dengan batasan string asli. Berbeda dengan "${my_arr[*]}" yang menggabungkan elemen array menjadi satu string dengan spasi sebagai pemisah.
Contoh pengujian dalam for loop:
for item in "${my_arr[@]}"menghasilkan dua baris, yaitu "one a" dan "two b".for item in "${my_arr[*]}"menghasilkan satu baris yaitu "one a two b".
Word Splitting: Penyebab Perubahan Jumlah Elemen
Saat parameter Bash diperluas tanpa tanda kutip seperti ${my_arr[@]}, Bash tidak hanya memperluas array tapi juga melakukan word splitting. Proses ini memecah setiap "kata Bash" menjadi beberapa kata berdasarkan karakter pemisah putih (white space) seperti spasi, tab, atau newline.
Contohnya, elemen "one a" menjadi dua kata "one" dan "a". Akibatnya, for loop akan menghasilkan empat iterasi: "one", "a", "two", dan "b". Ini berbeda dengan ekspansi dengan tanda kutip yang menjaga elemen sebagai satu unit.
Memodifikasi Pemisah Kata dengan IFS
Bash menggunakan variabel IFS (Internal Field Separator) untuk menentukan karakter mana yang dipakai sebagai pemisah kata saat word splitting. Standar IFS adalah spasi, tab, dan newline. Namun, IFS bisa diubah sesuai kebutuhan misalnya:
bash
IFS="+"
for item in ${my_arr[@]}; do
echo "$item"
done
Jika my_arr berisi 'one+a' 'two+b', maka output akan terpisah saat bertemu karakter +. Teknik ini berguna untuk mengendalikan bagaimana kata-kata dipecah saat ekspansi.
Pentingnya Mengutip Array untuk Menghindari Masalah
Konsistensi jumlah elemen array ditentukan berdasarkan "kata Bash" asli, bukan hasil word splitting. Ukuran array tetap sama terlepas dari penggunaan tanda kutip atau tidak saat mengaksesnya dengan ${#my_arr[@]}.
Dengan demikian, penggunaan tanda kutip saat memperluas array, khususnya "${my_arr[@]}", direkomendasikan agar elemen array tetap utuh dan loop dapat berjalan sesuai harapan. Ini juga berlaku untuk parameter khusus seperti $@ dan $* yang umumnya mewakili argumen fungsi atau skrip.
Pemahaman yang baik tentang ekspansi parameter dan word splitting sangat penting untuk menulis skrip Bash yang efektif dan bebas bug. Mengelola kutipan dan IFS secara tepat dapat membantu mencegah perilaku tidak diinginkan saat memanipulasi array dan pengulangan data.





