Retorna o índice de um elemento que corresponde a um valor

0

Eu tenho uma matriz -

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

Estou tentando encontrar o índice de todos os elementos cujos valores são iguais a 0

Como posso fazer isso?

Isso é o que eu tentei -

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

A saída deve ser

Index: 3, value: 0
Index: 9, value: 0
    
por PepeHands 13.11.2018 / 05:28

2 respostas

0
#!/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
    
por 13.11.2018 / 05:33
2

Se a matriz tiver lacunas, pode ser melhor fazer um loop pelos índices da matriz:

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

Então, se sua matriz for como:

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

Você ainda receberia 54 como o índice.

Isso também deve funcionar para matrizes associativas (strings como índices ao invés de inteiros).

    
por 13.11.2018 / 05:51

Tags