2つの異なる変数を使用してコマンドを繰り返すには?

2つの異なる変数を使用してコマンドを繰り返すには?

カーネル2.6.xの使用

GNU bash、バージョン 4.3.42(1)-リリース(arm-openwrt-linux-gnu)

Bashスクリプトで次の変数を使用して次の結果を生成するforループを作成するにはどうすればよいですか?

command option option abc option 10
command option option def option 20

VAR1=“abc 定義”

VAR2="10 20"

$VAR1を繰り返すことはできますが、$VAR2を繰り返す方法がわかりません。

for i in $VAR1; do
command option option "$VAR1" option "$VAR2"
done

コマンドラインを2つの文字列に分割し、それぞれを繰り返してから接続する必要がありますか?

配列でcount変数を使用するのはどうですか?たとえば...

count=1
echo ${VAR1["$count"]}

whileループが機能したら、変数を計算できますか?

答え1

これはどうですか:

arr1=(abc def)
arr2=(10 20)

それから:

for (( i=0; i<${#arr1[@]}; i++ )); do echo "${arr1[i]} ${arr2[i]}"; done
abc 10
def 20

あなたの場合、echoステートメントは次のとおりです。

for (( i=0; i<${#arr1[@]}; i++ )); do 
    echo "command option option ${arr1[i]} option ${arr2[i]}"
done
command option option abc option 10
command option option def option 20

バラよりここたとえば、bashのCスタイルforループです。

答え2

以下を使用する方が簡単ですzsh

$ a=(a b c) b=(1 2 3)
$ for i j (${a:^b}) echo "i: $i, j: $j"
i: a, j: 1
i: b, j: 2
i: c, j: 3

${a:^b}は配列圧縮演算子です(a、、、、、、、上に展開されています)。1b2c3

$VAR1POSIXに似たシェル(@maulinglawnsの答えの説明に基づいて使用されているように見えるbusybox)で、分割+glob演算子が適用される単語を繰り返す場合は、$VAR2位置引数を使用できます。sh

VAR1='a b c'
VAR2='1 2 3'
set -- $VAR1
for j in $VAR2; do
  echo "i: $1, j: $j"
  shift
done

関連情報