Получить последний элемент в массиве 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...?

мои исследования показывает:

Bash-4.3-rc1 доступно для FTP

a. Исправлена ошибка, вызвавшая присвоение переменной unset с помощью отрицательный индекс, чтобы привести к сбою сегментации.

b. Исправлена ошибка, вызвавшая присвоение строковой переменной с помощью отрицательный индекс для использования неверного индекса.

...

x. Оболочка теперь позволяет назначать, ссылаться и отключать элементы индексированных массивов использование отрицательных индексов (a[-1]=2, echo ${a[-1]}) которые отсчитываются от последнего элемента массива.

и Bash руководство 4.3, на массивах

ссылка на переменную массива без индекса эквивалентно ссылка с индексом 0. Если индекс используется для ссылки элемент индексированного массива вычисляется как число, меньшее нуля, он интерпретируется как относительный к одному больше, чем максимальный индекс этот массив, поэтому отрицательные индексы отсчитываются от конца массива, и индекс -1 относится к последнему элементу.

но мне интересно, было ли это уже в Bash 4.2, так как первый ресурс упоминает ошибку, которая была исправлена.

1 ответов


насколько я могу видеть в https://tiswww.case.edu/php/chet/bash/CHANGES, новая функция находится в этой части:

этот документ содержит изменения между этой версией, в bash-4.3-Альфа, и предыдущая версия, bash-4.2-release.

...

x. Оболочка теперь позволяет назначать, ссылаться и отключать элементы индексированных массивов с использованием отрицательных индексов (a[-1]=2, echo ${a[-1]}), которые отсчитываются из последнего элемента массива.

в :

этот документ содержит изменения между этой версией, bash-4.3-beta2 и революционная версия, bash-4.3-beta.

1 Изменения в Bash

a. Исправлена ошибка, вызвавшая присвоение переменной unset с использованием отрицательного индекса приводит к ошибке сегментации.

b. Исправлена ошибка, вызвавшая присвоение строковой переменной использование отрицательного индекса для использования неправильного индекса.

это исправление новой функции в Bash 4.3.