Ketika saya mengatur IFS
variabel ke spasi, bash
memperlakukan beberapa ruang sebagai satu ruang ( myprogram
adalah program yang mencetak argumen baris perintah yang diterimanya):
IFS=" "
x="hello hi world"
./myprogram $x
argv[1] = hello
argv[2] = hi
argv[3] = world
Tetapi ketika saya mengatur IFS
variabel ke koma, bash
tidak memperlakukan beberapa koma sebagai satu koma:
IFS=","
x="hello,,,hi,,,world"
./myprogram $x
argv[1] = hello
argv[2] =
argv[3] =
argv[4] = hi
argv[5] =
argv[6] =
argv[7] = world
Mengapa demikian?
Jawaban:
Ini didokumentasikan dalam
man bash
. Satu kejadian karakter apa pun di IFS yang bukan spasi putih membatasi bidang.Dari
man bash
:Contoh: pemisahan bidang
Jika IFS tidak memiliki karakter spasi, maka spasi putih disertakan dalam bidang:
Jika IFS memiliki kosong dan koma, maka urutan kosong, diikuti oleh koma, diikuti oleh urutan kosong diperlakukan sebagai pembatas tunggal:
Urutan koma ditafsirkan sebagai urutan bidang kosong:
Contoh: memimpin dan mengikuti spasi
Jika IFS tidak mengandung spasi putih, maka spasi putih apa pun yang memimpin dan tertinggal disimpan di bidang:
Jika IFS memang mengandung blanko, maka setiap blanko leading atau trailing dihapus:
sumber
awk
dengan-F'\t'
opsi ataucut
. Atau, jika Anda memiliki versi terbarubash
, Anda mungkin dapat menguraikan bidang menggunakanreadarray
dengan-d$'\t'
opsi.