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
Bagaimana cara mengurangi kerentanan Spectre dan Meltdown pada sistem Linux?
Apa yang terjadi jika Anda menghapus file perangkat?