返回与值匹配的元素的索引

返回与值匹配的元素的索引

我有一个数组 -

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

相关内容