2013-07-01 46 views
48

İki dizim var.Aynı anda iki dizide yineleyin

array=(
    Vietnam 
    Germany 
    Argentina 
) 
array2=(
    Asia 
    Europe 
    America 
) 

sonra yani ikinci elemanları ile aynı komutu çağırır ve, iki dizi birinci elemanlarının bir komut çağırmak yani simulataneously bu iki dizi üzerinde döngü istiyoruz. Pseudocode:

for c in $(array[*]} 
do 
    echo -e " $c is in ......" 
done 

Bunu nasıl yapabilirim? anishsane cevabı itibaren

paste <(tr ' ' '\n' <<< ${array[*]}) <(tr ' ' '\n' <<< ${array2[*]}) | sed 's/\t/ is in /' 

cevap

12

Sen

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 

Alternatif olarak, (döngü olmadan) bu seçeneği kullanabilirsiniz dizinin & dizi2 üzerinde bir döngü gerek istemek. İşte bir for döngüsü kullanarak, bashier stilinde aynı şey. Looping Constructs section in the reference manual'a bakın. Ayrıca echo yerine printf kullanıyorum.

#!/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 

sen ne yapmak istediğinize bağlı olarak, hem de bu ikinci olasılık düşünebilirsiniz:

#!/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 

başka olasılık bir ilişkisel dizi kullanmak olacaktır. Ancak, alanların ikinci olasılıkta gösterildiği gibi kolayca kontrol edemeyeceğinizi de unutmayın (iyi, bu bir çağrışımsal dizidir, yani gerçekten bir sürpriz değildir).

+3

I ** GUESS ** bu sizin istediğiniz şeydir. – anishsane

+0

TEŞEKKÜRLER !!! Mükemmel çalış !! – user2354862

+0

@ user2354862 Olursa, [yanıtı kabul etmelisiniz] (http://meta.stackexchange.com/a/5235). –

67

ve yorumlar burada şimdi seni biliyorum:

+0

Sanırım' 'a' değil -A' – Brian

+1

@Brian' -a' dizinli diziler için (yani, düzenli olanlar) ve '-A' için ilişkisel diziler (karma tablolar), yani bu durumda -A 'doğrudur. –

+0

hmm, acaba neden -A'nın declare ile çalıştığı o zaman – Brian

14

Dizilerin tümü doğru şekilde sıralanırsa, dizini geçirirsiniz.

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 
İlgili konular