Используйте ассоциативный массив, а не индексированный массив. (Также не используйте seq
; используйте вместо этого C -стиль для l oop.)
NStep=25
NTotal=435
declare -A Redone=([375]= [400]= [425]= [last]=)
for ((i=0; i<= $NTotal; i+=$NStep))
do
if [[ -v Redone[$i] ]]; then
echo "do something"
else
echo "do something else"
fi
done
Ключи ассоциативного массива действуют как набор, а -v
(который здесь проверяет, существует ли данный ключ в массиве) действует как оператор членства.
Для версий bash
, которые не позволяют использовать -v
с именами индексированных массивов ( 4.2 или более ранней версии), вы можете вернуться к проверке, если расширение не установлено.
if [[ "${Redone[$i]+x}" = x ]]
Поскольку вы использовали пустую строку в качестве значения для каждого, ${Redone[$i]+x}
будет расширяться до x
только когда $i
является ключом в массиве.