Получить последний элемент в массиве Bash
Скажем, у меня есть массив:
arr=(a b c d e f)
Если я хочу получить последний элемент массива, я обычно должен получить общее количество элементов, вычесть один и использовать это число для вызова в качестве индекса:
$ echo ${#arr[@]}
6
$ echo ${arr[${#arr[@]}-1]}
f
Тем не мение,я вижу что в последнее время (Bash 4.2 - 4.3) вы можете использовать отрицательные индексы:
$ echo ${arr[-1]}
f
$ echo ${arr[-2]}
e
Поэтому мне интересно: когда это было введено? Может ли он использоваться другими оболочками, такими как ksh, zsh ...?
Мое исследование показывает:
а. Исправлена ошибка, приводившая к присваиванию неустановленной переменной с использованием отрицательного индекса, что приводило к ошибке сегментации.
б. Исправлена ошибка, приводившая к присвоению строковой переменной с использованием отрицательного индекса для использования неверного индекса.
...
Икс. Теперь оболочка позволяет присваивать, ссылаться и сбрасывать элементы индексированных массивов, используя отрицательные индексы (a [-1] = 2, echo $ {a [-1]}), которые отсчитываются от последнего элемента массива.
А такжеБаш ручная 4.3, на Массивах
Ссылка на переменную массива без нижнего индекса эквивалентна ссылке с нижним индексом 0. Если нижний индекс, используемый для ссылки на элемент индексированного массива, оценивается как число меньше нуля, он интерпретируется как относительный к значению, превышающему максимальный индекс массив, так что отрицательные индексы отсчитываются от конца массива, ииндекс -1 относится к последнему элементу.
Но мне интересно, было ли это уже в Bash 4.2, так как в первом ресурсе упоминалась ошибка, которая была исправлена.