Pour répondre à la question dans le titre, vous pouvez "décaler" un tableau avec la notation sous-chaîne/sous-tableau. (shift
lui-même fonctionne uniquement avec les paramètres de position.)
$ a=(a b c d e)
$ a=("${a[@]:1}")
$ echo "${a[@]}"
b c d e
De même, pour "éjecter" le dernier élément du tableau :a=("${a[@]:0:${#a[@]} - 1}" )
ou unset "a[${#a[@]}-1]"
Donc, si vous le vouliez, vous pourriez faire ceci :
a=(foo bar doo)
b=(123 456 789)
while [ "${#a[@]}" -gt 0 ] ; do
echo "$a $b"
a=("${a[@]:1}")
b=("${b[@]:1}")
done
Mais cela détruit les tableaux, donc une simple indexation comme d'habitude pourrait être meilleure. Ou peut-être utiliser un tableau associatif à la place :
declare -A arr=([foo]=123 [bar]=456 [doo]=789)
Une remarque générale. Cela n'a pas de sens de définir un tableau comme celui-ci :
folder_mount_point_list="sdb sdc sdd sde sdf sdg"
folderArray=( $folder_mount_point_list )
Vous feriez ceci à la place :
folderArray=(sdb sdc sdd sde sdf sdg)
Passons maintenant à votre question :
set -- sdb sdc sdd sde sdf sdg
for folder_name; do
mkdir "/data/$folder_name"
done
ou
set -- sdb sdc sdd sde sdf sdg
while [ $# -gt 0 ]; do
mkdir "/data/$1"
shift
done
Vous pouvez simplement boucler sur toutes les valeurs, aucun décalage nécessaire :
folderArray=(sdb sdc sdd sde sdf sdg)
for folder in "${folderArray[@]}"; do
mkdir "/data/$folder"
done