Возврат индекс элемента, который соответствует значению

Если ваше намерение состоит в том, чтобы проверить, доступна ли конкретная команда, вы должны сделать это вместо того, чтобы пытаться ее выполнить:

if command -v spamegg >/dev/null; then
  echo spamegg is available
else
  apt-get install spamegg
fi

Попытка выполнить spamegg , чтобы проверить, доступна ли она, - плохой подход. Во-первых, он запутывает ваш код, делая его похожим на spamegg , который используется для установки чего-либо. Во-вторых (и что более важно), проверяемая вами команда может существовать, но по какой-то причине просто не работает:

if grep >/dev/null 2>&1; then
  echo grep is available
else
  echo grep is not available
fi

Это выведет grep is not available , даже если это так.

0
13.11.2018, 06:28
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
1
28.01.2020, 02:18

Если в массиве есть промежутки, может быть лучше перебрать индексы массива вместо этого:

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в качестве индекса.

Это также должно работать для ассоциативных массивов (строк как индексов вместо целых ).

3
28.01.2020, 02:18

Теги

Похожие вопросы