bash +リストの次の文字列に切り替える方法

bash +リストの次の文字列に切り替える方法

sdb次のリストは、との間のマーカーを示していますsd$MAXMAX範囲はc- である可能性がありますz)。

たとえば、

MAX=z
list=$(eval echo sd{b..$MAX})
echo $list

文字列は次のとおりです。 (例)

sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl sdm sdn sdo sdp sdq sdr sds sdt sdu sdv sdw sdx sdy sdz

私の質問は、ループごとにリストを次の文字列に移動する方法です。

例:

for i in disk1 disk2 disk3 disk4 ..................
do
echo $i    <...syntax...>
done

期待される出力

disk1   sdb
disk2   sdc
disk3   sdd
disk4   sde
.
.
.

ベストアンサー1

使用できる間接的な値の代わりに配列のインデックスを直接繰り返します。

与えられた

$ list=(sd{a..f})
$ echo "${list[@]}"
sda sdb sdc sdd sde sdf

それから

$ for i in "${!list[@]}"; do printf '%s %s\n' "disk${i}" "${list[$i]}"; done
disk0 sda
disk1 sdb
disk2 sdc
disk3 sdd
disk4 sde
disk5 sdf

本当に必要な方法で実行するには、ループしたい文字列要素から利用可能な整数インデックスを抽出する必要があります。たとえば、diskパラメータ置換を使用して先行文字列を削除します。

for d in disk1 disk2 disk3 disk4; do printf '%s %s\n' "$d" "${list[${d##disk}]}"; done
disk1 sdb
disk2 sdc
disk3 sdd
disk4 sde

おすすめ記事