ループを介して変数値を印刷します。

ループを介して変数値を印刷します。

次の文を使用して以下の変数を印刷するためにforループを使用していますが、値が正しく印刷されません。繰り返し値のみを提供します。誰でも私を助けることができますか?

value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"

for iteration in {1..3}
do
echo ""$value""$iteration" - "$package""$iteration""
done

予想出力:

1500067 - CNN
1500068 - Fox
1500069 - Discovery

答え1

次のタスクには実際に配列を使用する必要があります。

#!/bin/bash
values=( 
    1500067
    1500068
    1500069
)
packages=( 
    CNN 
    FOX 
    Discovery
)

for (( i=0; i < ${#values[@]}; i++ )); do
    echo "${values[i]} - ${packages[i]}"
done

または、自然なキーと値のペアがあるため、連想配列

#!/bin/bash
declare -A packages=( 
    [1500067]=CNN 
    [1500068]=FOX 
    [1500069]=Discovery
)

for key in "${!packages[@]}"; do
    echo "$key - ${packages[$key]}"
done

答え2

私はこれを使ってこれを行うことができました。

#!/bin/sh
value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"

for i in {1..3}; do
    var1="value$i"
    var2="package$i"
    echo "${!var1} - ${!var2}"
done

echoコマンドに二重引用符を使用しすぎて、変数の設定方法のために変数を実際に引用符を解除しました。パラメータ全体を一対の引用符で囲むだけです。変数と一致する必要がある場合は、括弧を使用して名前を保持することをお勧めします。

${var1}_something_else

ハッシュバンにもかかわらず、これにはbash-ismと間接的な#!/bin/sh内容が含まれていると思います。それでも私のシステムでは動作します。{1..3}${1var}

関連情報