bash에서 2개 이상의 어레이를 동시에 반복합니다.
2개의 어레이가 있습니다.
array=(
Vietnam
Germany
Argentina
)
array2=(
Asia
Europe
America
)
이 두 어레이를 동시에 루프합니다.즉, 두 어레이의 첫 번째 요소에서 명령을 호출하고 두 번째 요소에서 동일한 명령을 호출하는 등의 작업을 수행합니다.유사 코드:
for c in ${array[*]}
do
echo -e " $c is in ......"
done
이거 어떻게 해?
아니샨의 대답과 그 코멘트를 통해 우리는 당신이 무엇을 원하는지 알 수 있습니다.여기 같은 것을 bashier 스타일로 나타냅니다.for loop을 사용합니다.참조 매뉴얼의 "루핑 구성" 섹션을 참조하십시오.저도 쓰고 있어요.printf
대신echo
.
#!/bin/bash
array=( "Vietnam" "Germany" "Argentina" )
array2=( "Asia" "Europe" "America" )
for i in "${!array[@]}"; 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
하고 싶은 일에 따라서는, 이 두 번째 가능성을 고려해 보는 것이 좋다.단, 두 번째 가능성에서는 필드가 표시되는 순서를 쉽게 제어할 수 없습니다(연관 배열이므로 별로 놀랄 일도 아닙니다).
모든 배열이 올바르게 정렬되어 있는 경우 인덱스를 돌립니다.
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
편집: 다음 항목을 사용하지 마십시오.tr
도입에 근거하고 있습니다.공백이 포함된 배열 요소에는 작동하지 않습니다.코멘트가 관련성을 유지하기 위해 삭제하지 않는다.아래 답변 대신 글렌 잭맨의 코멘트를 참조하십시오.
/편집
또는 루프 없이 다음 옵션을 사용할 수 있습니다.
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
두 개의 변수가 여러 줄을 가진 두 개의 문자열인 경우 다음과 같이 하십시오.
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"
나는 두 가지 이유로 이 답을 여기에 추가한다.먼저, imo false taged duplicate(bash의 값 쌍 위에 루프)가 여기에 표시됩니다.
둘째, 시나리오는 약간 다르지만 이 답변은 주제에 대한 귀중한 지식을 추가합니다.
이 질문에서는 2개의 어레이가 반복됩니다.복제된 어레이에서는 연결된 값에 대해 중첩된 반복이 존재하므로 값 쌍에 대해 반복됩니다.
다음은 값 쌍의 배열에서 값 쌍에 대한 반복입니다. 도움이 되었습니다.
PAIRS=("Vietnam Asia" \
"Germany Europe" \
"Argentina America")
for pair in "${PAIRS[@]}"
do
set -- $pair
echo "$1 is in $2"
done
주의:set -- e
예를 들면...이 경우 첫 번째 반복에 대한 첫 번째 및 두 번째 매개 변수로서 베트남과 아시아가 사용됩니다.
언급URL : https://stackoverflow.com/questions/17403498/iterate-over-two-arrays-simultaneously-in-bash
'source' 카테고리의 다른 글
각도에서의 INPUT 요소에 대한 ngModel 내 파이프 사용 (0) | 2023.04.24 |
---|---|
Eclipse에서 단일 JUnit 테스트 실행 (0) | 2023.04.24 |
브랜치에서 커밋을 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
부호화를 수동으로 지정하지 않고 C# 내의 문자열을 일관된 바이트 형식으로 표시하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
PropertyChanged 이벤트는 항상 null입니다. (0) | 2023.04.19 |