GNU/Linux >> Belajar Linux >  >> Linux

Memahami Jika?

Beberapa utas berikut di situs ini dan StackOverflow sangat membantu untuk memahami bagaimana IFS bekerja:

  • Apa yang dimaksud dengan IFS dalam konteks perulangan?
  • Cara mengulang baris file
  • Bash, baca baris demi baris dari file, dengan IFS

Tapi saya masih punya beberapa pertanyaan singkat. Saya memutuskan untuk bertanya kepada mereka di pos yang sama karena saya pikir ini dapat membantu pembaca masa depan yang lebih baik:

Q1. IFS biasanya dibahas dalam konteks "pemisahan bidang". Apakah pemisahan bidang sama dengan pemisahan kata ?

T2: Spesifikasi POSIX mengatakan:

Jika nilai IFS adalah nol, tidak ada pemisahan bidang yang akan dilakukan.

Apakah pengaturan IFS= sama dengan pengaturan IFS ke nol? Apakah ini yang dimaksud dengan menyetelnya ke empty string juga?

P3: Dalam spesifikasi POSIX, saya membaca yang berikut:

Jika IFS tidak disetel, shell akan berperilaku seolah-olah nilai IFS adalah
<space>, <tab> and <newline>

Katakanlah saya ingin mengembalikan nilai default IFS . Bagaimana aku melakukan itu? (lebih khusus, bagaimana cara merujuk ke <tab> dan <newline> ?)

P4: Terakhir, bagaimana kode ini:

while IFS= read -r line
do    
    echo $line
done < /path_to_text_file

berperilaku jika kita mengubah baris pertama menjadi

while read -r line # Use the default IFS value

atau ke:

while IFS=' ' read -r line

Jawaban yang Diterima:

  1. Ya, mereka sama.
  2. Ya.
  3. Di bash, dan shell serupa, Anda bisa melakukan sesuatu seperti IFS=$' tn' . Jika tidak, Anda dapat menyisipkan kode kontrol literal dengan menggunakan [space] CTRL+V [tab] CTRL+V [enter] . Namun, jika Anda berencana untuk melakukan ini, lebih baik menggunakan variabel lain untuk menyimpan IFS yang lama untuk sementara. nilai, lalu pulihkan setelahnya (atau timpa sementara untuk satu perintah dengan menggunakan var=foo command sintaks).
    • Cuplikan kode pertama akan menempatkan seluruh baris yang dibaca, kata demi kata, ke dalam $line , karena tidak ada pemisah bidang untuk melakukan pemisahan kata. Namun perlu diingat bahwa karena banyak shell menggunakan cstring untuk menyimpan string, instance pertama dari NUL masih dapat menyebabkan tampilannya dihentikan sebelum waktunya.
    • Cuplikan kode kedua mungkin tidak memasukkan salinan input yang sama persis ke dalam $line . Misalnya, jika ada beberapa pemisah bidang berurutan, mereka akan dibuat menjadi satu contoh elemen pertama. Ini sering dikenali sebagai hilangnya spasi putih di sekitarnya.
    • Cuplikan kode ketiga akan melakukan hal yang sama seperti yang kedua, kecuali hanya akan dibagi pada spasi (bukan spasi, tab, atau baris baru biasa).
Terkait:Memahami "IFS=baca -r baris"?
Linux
  1. Bagaimana Cara Membaca Alamat Ip Secara Mundur?

  2. 'Seandainya'?

  3. Memahami Hak Istimewa MySQL

  1. Memahami "jika =Baca -r Baris"?

  2. Dalam `sementara Ifs=Read..`, Mengapa Ifs Tidak Berpengaruh?

  3. tar:baca singkat

  1. Memahami Desktop Linux?

  2. Memahami utilitas logrotate

  3. Memahami Tindakan rsyslog