масив
Найдавнішою альтернативою в bash (Since bash 3.0+) є:
$ a=(aa bb cc dd ee)
$ echo "${a[@]:(-1)} ${a[@]: -1} ${a[@]:(~0)} ${a[@]:~0}"
ee ee ee ee
Пробіл необхідний, щоб уникнути інтерпретації з :
наступним мінусом -
як розширенням "${var:-abc}"
(Використовувати значення за замовчуванням).
Це ~
арифметичне побітове заперечення (еквівалентне доповненню чи перегортанню всіх біт ). Від man bash:
АРИТМЕТИЧНА ОЦІНКА
! ~ logical and bitwise negation
Так як bash-4.2 + також:
$ echo "${a[-1]} ${a[(~0)]}"
ee ee
З bash 5.0+ також:
$ echo "${a[~0]}"
ee
Для всіх версій bash (старіших bash):
$ echo "${a[ ${#a[@]}-1 ]}" # spaces added **only** for readability
ee
@
Для позиційних аргументів (з bash 2.01):
$ set aa bb cc dd ee
$ echo "${@:(-1)} ${@:~0} ${@: -1} ${@:$#} ${!#}"
ee ee ee ee
Портативним рішенням для всіх оболонок є використання eval:
eval printf '"%s\n"' \"\${$#}\"
$@
не зовсім масив (не можна підписати). Для цього див. Розділ Отримання останнього аргументу, переданого сценарію оболонки .