Per rispondere alla domanda nel titolo, puoi "spostare" un array con la notazione sottostringa/sottoarray. (shift
stesso funziona solo con i parametri posizionali.)
$ a=(a b c d e)
$ a=("${a[@]:1}")
$ echo "${a[@]}"
b c d e
Allo stesso modo, per estrarre l'ultimo elemento dall'array:a=("${a[@]:0:${#a[@]} - 1}" )
o unset "a[${#a[@]}-1]"
Quindi, se lo desideri, puoi farlo:
a=(foo bar doo)
b=(123 456 789)
while [ "${#a[@]}" -gt 0 ] ; do
echo "$a $b"
a=("${a[@]:1}")
b=("${b[@]:1}")
done
Ma distrugge gli array, quindi solo l'indicizzazione come al solito potrebbe essere migliore. O forse usa invece un array associativo:
declare -A arr=([foo]=123 [bar]=456 [doo]=789)
Un'osservazione generale. Non ha senso definire un array come questo:
folder_mount_point_list="sdb sdc sdd sde sdf sdg"
folderArray=( $folder_mount_point_list )
Faresti invece questo:
folderArray=(sdb sdc sdd sde sdf sdg)
Passiamo ora alla tua domanda:
set -- sdb sdc sdd sde sdf sdg
for folder_name; do
mkdir "/data/$folder_name"
done
o
set -- sdb sdc sdd sde sdf sdg
while [ $# -gt 0 ]; do
mkdir "/data/$1"
shift
done
Puoi semplicemente scorrere tutti i valori, senza bisogno di spostamenti:
folderArray=(sdb sdc sdd sde sdf sdg)
for folder in "${folderArray[@]}"; do
mkdir "/data/$folder"
done