次の文を使用して以下の変数を印刷するために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}