タイトルの質問に答えるには、部分文字列/部分配列表記を使用して配列を「シフト」できます。 (shift
それ自体は位置パラメータのみで機能します。)
$ a=(a b c d e)
$ a=("${a[@]:1}")
$ echo "${a[@]}"
b c d e
同様に、配列から最後の項目を「ポップ」するには:a=("${a[@]:0:${#a[@]} - 1}" )
または unset "a[${#a[@]}-1]"
そのため、必要に応じて次のようにすることもできます:
a=(foo bar doo)
b=(123 456 789)
while [ "${#a[@]}" -gt 0 ] ; do
echo "$a $b"
a=("${a[@]:1}")
b=("${b[@]:1}")
done
ただし、配列が破棄されるため、通常どおりインデックスを付けるだけの方がよい場合があります。または、代わりに連想配列を使用することもできます:
declare -A arr=([foo]=123 [bar]=456 [doo]=789)
一般的な意見。次のように配列を定義しても意味がありません:
folder_mount_point_list="sdb sdc sdd sde sdf sdg"
folderArray=( $folder_mount_point_list )
代わりにこれを行います:
folderArray=(sdb sdc sdd sde sdf sdg)
では、あなたの質問に答えてください:
set -- sdb sdc sdd sde sdf sdg
for folder_name; do
mkdir "/data/$folder_name"
done
または
set -- sdb sdc sdd sde sdf sdg
while [ $# -gt 0 ]; do
mkdir "/data/$1"
shift
done
すべての値を単純にループすることができ、シフトは必要ありません:
folderArray=(sdb sdc sdd sde sdf sdg)
for folder in "${folderArray[@]}"; do
mkdir "/data/$folder"
done