값과 일치하는 요소의 인덱스를 반환합니다.

값과 일치하는 요소의 인덱스를 반환합니다.

나는 배열을 가지고 있습니다 -

val=(4196976 4601313 4242010 0 3581283 2392831 3176852 3205880 3794451 0 3627872)

값이 0인 모든 요소의 인덱스를 찾으려고 합니다.

어떻게 해야 하나요?

이것이 내가 시도한 것입니다 -

for ((i = 1; i <= 10; i++)); do
    if [ "$i" -eq "0" ]; then
            echo "Index: $i, value: ${val[i]}"
    fi
done

출력은

Index: 3, value: 0
Index: 9, value: 0

답변1

배열에 간격이 있는 경우 배열의 인덱스를 반복하는 것이 좋습니다.

for i in "${!val[@]}"
do
    if [[ ${val[i]} -eq 0 ]]
    then
        echo "Index: $i, value: ${val[i]}"
    fi
done

따라서 배열이 다음과 같다면:

val=([100]=327823 [54]=0 [787998]=377463287)

여전히 54색인을 얻을 수 있습니다.

이는 연관 배열(정수가 아닌 인덱스로 사용되는 문자열)에서도 작동합니다.

답변2

#!/bin/bash
val=(4196976 4601313 4242010 0 3581283 2392831 3176852 3205880 3794451 0 3627872)
n=0
for i in ${val[@]}; do
    [ $i -eq 0 ] && echo Index: $n, value: $i
    ((n++))
done

관련 정보