bash中括弧拡張:他のリストを初期リストに関連付けることはできますか?

bash中括弧拡張:他のリストを初期リストに関連付けることはできますか?

例:

$ eval echo "{x,y,z}\ --opt\; "
x --opt; y --opt; z --opt;

2番目のリストが{1,2,3}あり、その長さが最初の(初期)リストの長さと同じであるとします。

質問:

  1. 農産物の作り方bash
x --opt 1; y --opt 2; z --opt 3;
  1. 製品の作成方法bash(例:リストの要素を参照{x,y,z}):
x --opt x; y --opt y; z --opt z;

単一の裏地が好ましい。

ベストアンサー1

ブレーキ拡張はすべての可能なペアを生成し、両方のリストを並列に巡回しません。

$ echo {x,y,z}' --opt; '{1,2,3}
x --opt; 1 x --opt; 2 x --opt; 3 y --opt; 1 y --opt; 2 y --opt; 3 z --opt; 1 z --opt; 2 z --opt; 3

必要な出力を生成するには、他のものを使用する必要があります。たとえば、配列のインデックスを繰り返す場合は、次のようになります。

#! /bin/bash
opt1=(x y z)
opt2=(1 2 3)
for i in "${!opt1[@]}" ; do
    printf '%s --opt %s; ' "${opt1[i]}" "${opt2[i]}"
done
echo

または連想配列を使用します。

#! /bin/bash
declare -A opts=([x]=1 [y]=2 [z]=3)
for i in "${!opts[@]}" ; do
    printf '%s --opt %s; ' "$i" "${opts[$i]}"
done
echo

おすすめ記事