2016-07-07 2 views
-1

아래 코드는 두 개입니다 ... array와 array2.리눅스 Bashrc 다음 루프 For

#!/bin/bash 

array = (1 3 5 7 9) 
array2 = (2 4 6 8 A) 

for i in "${array[@]}" 
do 
    echo $i 
    for i in "${array2[@]}" 
    do 
    echo $i 
    done 
done 

나는 내 스크립트를 실행하면 다음과 같은 출력이 내 콘솔에 밖으로 반향 갖고 싶어 :

1 
2 
3 
4 
5 
6 
7 
8 
9 
A 

을하지만 그 대신 나는 다음과 같은 얻을 :

1 
2 
4 
6 
8 
A 
3 
2 
4 
6 
8 
A 
5 
2 
4 
6 
8 
A 
7 
2 
4 
6 
8 
A 
9 
2 
4 
6 
8 
A 

정말이야 C/C++ 에서처럼 중첩 된 루프를 통해 다음을 수행하려고합니다.

char array[5] = {1, 3, 5, 7, 9}; 
char array2[5] = {2, 4, 6, 8, A}; 

for (int i=0; i<5; i++){ 
    std::cout << array[i] << std::endl; 
    std::cout << array2[i] << std::endl; 
} 

하지만 두 개의 다른 배열을 제어하기 위해 같은 반복기를 사용할 수 있습니까? 대신에 요소의 인덱스를 통해

+4

C++ 예제에는 중첩 루프가 없으므로 bash 스크립트에서 왜 필요하다고 생각하십니까? –

+2

그냥 참고 사항 : 배열을 시작할 때 몇 가지 구문 오류가 있습니다 ('='주위의 공백). – Kusalananda

답변

5

루프 :

#!/bin/bash 

array=(1 3 5 7 9) 
array2=(2 4 6 8 A) 

for i in "${!array[@]}" 
do 
    echo "${array[i]}" 
    echo "${array2[i]}" 
done 
1

더 많은 이하 C의 정확한 전사는 ++ 코드는 반복 첫째을 인쇄 할 수 있습니다,

for i in {0..5} 
do 
    echo ${array[$i]} 
    echo ${array2[$i]} 
done 
1

다른 알고리즘을 추가하는 것입니다 첫 번째 요소가 비어있을 때까지 각 배열의 요소를 삭제합니다.

array=(1 3 5 7 9) 
array2=(2 4 6 8 A) 

while [ -n "$array" ] 
do 
    echo ${array[0]} 
    echo ${array2[0]} 
    array=("${array[@]:1}") 
    array2=("${array2[@]:1}") 
done 

편집 :이 작업은 배열을 파기합니다. 따라서 루프 이후의 배열에 신경 쓰지 않는 경우에만 사용하십시오.

+0

왜 단순히 배열을 반복하는 과정에서 배열을 파괴하고 있습니까? – chepner

+0

좋은 지적입니다. 저는 OP가이 목적을 위해 특별히 어레이를 제작하고 있다고 가정하고있었습니다. 대답에 면책 조항을 넣을 것입니다. – Taywee