PATHのforループ変数の正しい構文は何ですか?

PATHのforループ変数の正しい構文は何ですか?

次のループを実行する必要があります。

root1=path/to/root1
root2=path/to/root2   
for i in {1..2}; do ${root${i}}; done

それいいえ希望の出力を提供します。

path/to/root1
path/to/root2

管理者提案スレッドは、私が望む結果につながらないソリューションを提供します。

for i in {1..2}; do \$root$i; done

出力:

$root1
$root2

答え1

シェルを使用すると仮定すると、bash配列を使用したいようです。

root[1]=path/to/root1
root[2]=path/to/root2

for i in {1..2}; do
    printf '%s\n' "${root[i]}"
done

または、割り当てをroot単一の配列割り当てに書き込みます(bash明示的なインデックス付けを使用しない限り、配列の最初のインデックスは0です)。

root=( path/to/root1 path/to/root2 )

for i in {0..1}; do
    printf '%s\n' "${root[i]}"
done

および/または配列の値(インデックスではない)を繰り返します。

root=( path/to/root1 path/to/root2 )

for i in "${root[@]}"; do
    printf '%s\n' "$i"
done

(単に配列を出力し、ループを必要とせず、printf '%s\n' "${root[@]}"別の行に配列の値を印刷するだけで十分です)


通常、配列がどのインデックスを使用しているかわかりません(配列に連続していないインデックスがある可能性があるため)、利用可能なインデックスを繰り返すには、次の手順を繰り返します"${!root[@]}"

root=( path/to/root1 path/to/root2 )

for i in "${!root[@]}"; do
    printf '%s\n' "${root[$i]}"
done

関連情報