Это прекрасно работает для меня, за исключением того, что вы не можете сделать return -1
. Обычное значение ошибки: 1
.
Сообщение об ошибке вызвано тем, что у вас есть set -u
, и вы запускаете цикл for
в INDEX
вместо INDEX-1
(${ARRAY[INDEX]}
всегда будет пустым из-за того, что цикл while
написано). Поскольку вы используете %d
в своем операторе printf
, пустые переменные будут печататься как "0" (если set -u
не действует).
Кроме того, бессмысленно объявлять массив с размером. Массивы в Bash полностью динамичны.
Я бы закодировал цикл for
с тестом для 0
(потому что -1
выглядит сбивающим с толку, поскольку он не может быть индексом численно индексированного массива):
for (( COUNT=INDEX - 1; COUNT>=0; COUNT--))
Данная форма устарела:
INDEX=$[ $INDEX + 1 ]
Используйте это вместо:
INDEX=$(( $INDEX + 1 ))
или это:
((INDEX++))
Я также рекомендую использовать строчные или смешанные переменные как привычку, чтобы уменьшить вероятность конфликта имен переменных с переменными оболочки.
Вы не используете $1
для чего-либо.