Получить последний элемент в массиве 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. Исправлена ошибка, вызвавшая присвоение переменной 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.