Если ваше намерение состоит в том, чтобы проверить, доступна ли конкретная команда, вы должны сделать это вместо того, чтобы пытаться ее выполнить:
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
, даже если это так.
#!/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
Если в массиве есть промежутки, может быть лучше перебрать индексы массива вместо этого:
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
в качестве индекса.
Это также должно работать для ассоциативных массивов (строк как индексов вместо целых ).