Um die Frage im Titel zu beantworten, können Sie ein Array mit der Substring/Subarray-Notation "verschieben". (shift
selbst funktioniert nur mit den Positionsparametern.)
$ a=(a b c d e)
$ a=("${a[@]:1}")
$ echo "${a[@]}"
b c d e
Ähnlich, um das letzte Element aus dem Array zu 'knallen':a=("${a[@]:0:${#a[@]} - 1}" )
oder unset "a[${#a[@]}-1]"
Wenn Sie also wollten, könnten Sie Folgendes tun:
a=(foo bar doo)
b=(123 456 789)
while [ "${#a[@]}" -gt 0 ] ; do
echo "$a $b"
a=("${a[@]:1}")
b=("${b[@]:1}")
done
Aber es ruiniert die Arrays, also könnte es besser sein, einfach wie gewohnt zu indizieren. Oder verwenden Sie stattdessen ein assoziatives Array:
declare -A arr=([foo]=123 [bar]=456 [doo]=789)
Eine allgemeine Bemerkung. Es macht keinen Sinn, ein Array wie folgt zu definieren:
folder_mount_point_list="sdb sdc sdd sde sdf sdg"
folderArray=( $folder_mount_point_list )
Sie würden stattdessen Folgendes tun:
folderArray=(sdb sdc sdd sde sdf sdg)
Nun zu Ihrer Frage:
set -- sdb sdc sdd sde sdf sdg
for folder_name; do
mkdir "/data/$folder_name"
done
oder
set -- sdb sdc sdd sde sdf sdg
while [ $# -gt 0 ]; do
mkdir "/data/$1"
shift
done
Sie können einfach alle Werte durchlaufen, kein Verschieben erforderlich:
folderArray=(sdb sdc sdd sde sdf sdg)
for folder in "${folderArray[@]}"; do
mkdir "/data/$folder"
done