GNU/Linux >> Belajar Linux >  >> Linux

cara menggeser nilai array di bash

Untuk menjawab pertanyaan di judul, Anda dapat "menggeser" array dengan notasi substring/subarray. (shift itu sendiri berfungsi hanya dengan parameter posisi.)

$ a=(a b c d e)
$ a=("${a[@]:1}")
$ echo "${a[@]}"
b c d e

Demikian pula, untuk 'meletuskan' item terakhir dari larik:a=("${a[@]:0:${#a[@]} - 1}" ) atau unset "a[${#a[@]}-1]"

Jadi jika Anda mau, Anda bisa melakukan ini:

a=(foo bar doo)
b=(123 456 789)
while [ "${#a[@]}" -gt 0 ] ; do
    echo "$a $b"
    a=("${a[@]:1}")
    b=("${b[@]:1}")
done

Tapi itu merusak array, jadi pengindeksan seperti biasa mungkin lebih baik. Atau mungkin gunakan array asosiatif sebagai gantinya:

declare -A arr=([foo]=123 [bar]=456 [doo]=789)

Komentar umum. Tidak masuk akal untuk mendefinisikan larik seperti ini:

folder_mount_point_list="sdb sdc sdd sde sdf sdg"
folderArray=( $folder_mount_point_list )

Anda akan melakukan ini sebagai gantinya:

folderArray=(sdb sdc sdd sde sdf sdg)

Sekarang untuk pertanyaan Anda:

set -- sdb sdc sdd sde sdf sdg
for folder_name; do
    mkdir "/data/$folder_name"
done

atau

set -- sdb sdc sdd sde sdf sdg
while [ $# -gt 0 ]; do
    mkdir "/data/$1"
    shift
done

Anda cukup mengulangi semua nilai, tidak perlu mengubah:

folderArray=(sdb sdc sdd sde sdf sdg)

for folder in "${folderArray[@]}"; do
    mkdir "/data/$folder"
done

Linux
  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Bagaimana Cara Membuat Array Elemen Unik Dari String/array Di Bash?

  3. Bagaimana Cara Mendeteksi Bash>=4.0?

  1. Cara menggunakan perintah riwayat Bash

  2. Bagaimana saya bisa mendapatkan nilai unik dari array di Bash?

  3. bagaimana cara menggunakan kill SIGUSR2 di bash?

  1. Cara menulis loop di Bash

  2. Bagaimana Cara Mempersingkat Bash Prompt di Linux?

  3. Bash:Tombol Shift+panah Buat A,b,c,d?