2つの配列があります。
array=(
Vietnam
Germany
Argentina
)
array2=(
Asia
Europe
America
)
これら2つの配列を同時にループ処理します。つまり、2つの配列の最初の要素でコマンドを呼び出し、次に2番目の要素で同じコマンドを呼び出します。擬似コード:
for c in $(array[*]}
do
echo -e " $c is in ......"
done
これどうやってするの?
アニシュセインの答えとその中のコメントから、私たちはあなたが望むものを知っています。 forループを使用したbashierスタイルでも同じことが言えます。リファレンスマニュアルの Looping Constructsセクション を参照してください。 printf
の代わりにecho
も使用しています。
#!/bin/bash
array=( "Vietnam" "Germany" "Argentina" )
array2=( "Asia" "Europe" "America" )
for ((i=0;i<${#array[@]};++i)); do
printf "%s is in %s\n" "${array[i]}" "${array2[i]}"
done
別の可能性は、連想配列を使用することです。
#!/bin/bash
declare -A continent
continent[Vietnam]=Asia
continent[Germany]=Europe
continent[Argentina]=America
for c in "${!continent[@]}"; do
printf "%s is in %s\n" "$c" "${continent[$c]}"
done
何をしたいかによっては、この2番目の可能性も考慮する必要があります。ただし、2番目の方法ではフィールドの表示順序を簡単に制御できないことに注意してください(まあ、これは連想配列なので、驚くことではありません)。
すべての配列が正しく順序付けられている場合、インデックスを渡すだけです。
array=(
Vietnam
Germany
Argentina
)
array2=(
Asia
Europe
America
)
for index in ${!array[*]}; do
echo "${array[$index]} is in ${array2[$index]}"
done
Vietnam is in Asia
Germany is in Europe
Argentina is in America
配列と配列2のループが必要です
i=0
while [ $i -lt ${#array[*]} ]; do
echo ${array[$i]} is in ${array2[$i]}
i=$(( $i + 1));
done
Vietnam is in Asia
Germany is in Europe
Argentina is in America
または、このオプションを使用できます(ループなし)。
paste <(tr ' ' '\n' <<< ${array[*]}) <(tr ' ' '\n' <<< ${array2[*]}) | sed 's/\t/ is in /'
特に質問(3項目の配列)の場合:
for i in $(seq 0 2) ; do echo "${array1[$i]} is in ${array2[$i]}" ; done
次のように、2つの変数が複数の行を持つ2つの文字列の場合:
listA=$(echo -e "Vietnam\nGermany\nArgentina")
listB=$(echo -e "Asia\nEurope\nAmerica")
次に、この場合の解決策は次のとおりです。
while read strA <&3 && read strB <&4; do
echo "$strA is in $strB"
done 3<<<"$listA" 4<<<"$listB"