GNU/Linux >> Belajar Linux >  >> Linux

Perilaku Array dalam skrip bash dan zsh shell (Mulai Indeks 0 atau 1?)

TL;DR:

  • bash pengindeksan array dimulai dari 0 (selalu)
  • zsh pengindeksan array dimulai pada 1 (kecuali opsi KSH_ARRAYS diatur)

Untuk selalu mendapatkan perilaku yang konsisten, gunakan:

${array[@]:offset:length}

Penjelasan

Untuk kode yang berfungsi di kedua bash dan zsh , Anda harus menggunakan offset:length sintaks daripada [subscript] sintaksis.

Bahkan untuk zsh -hanya kode, Anda masih perlu melakukan ini (atau gunakan emulate -LR zsh ) sejak zsh basis subskrip array ditentukan oleh KSH_ARRAYS opsi.

Misalnya, untuk mereferensikan elemen pertama dalam larik:

${array[@]:0:1}

Ini, array[@] adalah semua elemen, 0 adalah offset (yang selalu berbasis 0), dan 1 adalah jumlah elemen yang diinginkan.


Array di Bash diindeks dari nol, dan di zsh diindeks dari satu.

Tetapi Anda tidak memerlukan indeks untuk kasus penggunaan sederhana seperti ini. Mengulangi ${array[@]} berfungsi di keduanya:

files=(file*)
for f in "${files[@]}"; do
    echo "$f"
done

Di zsh Anda juga bisa menggunakan $files bukannya "${files[@]}" , tapi itu tidak berhasil di Bash. (Dan ada sedikit perbedaan yang menjatuhkan elemen larik kosong, tetapi Anda tidak akan mendapatkannya dari nama file.)

Juga, jangan gunakan $(ls file*) , itu akan rusak jika Anda memiliki nama file dengan spasi (lihat WordSpliting di BashGuide), dan sama sekali tidak berguna untuk memulai.

Shell sangat mampu menghasilkan nama file dengan sendirinya. Itulah yang sebenarnya akan terjadi di sana, shell menemukan semua file dengan nama yang cocok dengan file* , meneruskannya ke ls , dan ls cukup cetak lagi untuk dibaca dan diproses oleh shell.


Linux
  1. Bash Array Dengan Contoh

  2. Temukan dan ganti dalam skrip shell

  3. bash:atur variabel array env dan de-referensi dari skrip shell gagal

  1. Cara memprogram dengan Bash:Sintaks dan alat

  2. Bash array dan subskrip negatif, ya atau tidak?

  3. Apa sebenarnya <() di bash (dan =() di zsh)?

  1. 25 Pertanyaan dan Jawaban Wawancara Linux Shell Scripting

  2. Bash Array Dari Array?

  3. Bagaimana Membandingkan String di Bash Shell Scripting