Bashで配列値を移動する方法

Bashで配列値を移動する方法

たとえば、6つのマウントポイントフォルダを構築したいとします。

/data/sdb
/data/sdc
/data/sdd
/data/sde
/data/sdf
/data/sdg

だから我々は配列を使ってこの単純なbashスクリプトを書いた。

folder_mount_point_list="sdb sdc sdd sde sdf sdg"

folderArray=( $folder_mount_point_list )

counter=0
for i in disk1 disk2 disk3 disk4 disk4 disk5 disk6
do
folder_name=${folderArray[counter]}
mkdir /data/$folder_name
let counter=$counter+1
done

今私たちはなしでコードを変更したいと思います。カウンターそしてLet=$counter=カウンター+1

次の配列値を得るために配列の各ループを移動することは可能ですか?

良い

${folderArray[++]}

ベストアンサー1

タイトルの質問に答えるには、サブストリング/サブ配列表記を使用して配列を「移動」できます。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

ただし、配列が破損し、「移動」割り当てによってデータが不必要にコピーされる可能性があるためいつものようにインデックスを作成する方が良いかもしれません。

a=(foo bar doo)
b=(123 456 789)
i=0
while [ "$i" -lt "${#a[@]}" ]; do
    echo "${a[i]} ${b[i]}"
    i=$((i+1))
done

あるいは、項目の順序が重要でない場合は、代わりに連想配列を使用できます。"${!arr[@]}"キーは指定されていない順序で提供されます。いいえ割り当てられた順序は次のとおりです。

declare -A arr=([foo]=123 [bar]=456 [doo]=789)
for k in "${!arr[@]}"; do
    echo "$k ${arr[$k]}"
done

おすすめ記事