dizi
Bash'daki en eski alternatif (ler) (bash 3.0+):
$ a=(aa bb cc dd ee)
$ echo "${a[@]:(-1)} ${a[@]: -1} ${a[@]:(~0)} ${a[@]:~0}"
ee ee ee ee
Uzay yorumlanmasını önlemek için gereklidir :
bir eksi ardından -
genişlemesi olarak "${var:-abc}"
(Kullanım Varsayılan Değerler).
Bu ~
, aritmetik bir bitsel olumsuzlamadır (birinin tamamlayıcısına eşdeğerdir veya tüm bitleri çevirir ). Adam bash'tan:
ARİTMETİK DEĞERLENDİRME
! ~ logical and bitwise negation
Bash-4.2 + 'dan beri:
$ echo "${a[-1]} ${a[(~0)]}"
ee ee
Bash 5.0+ 'dan beri:
$ echo "${a[~0]}"
ee
Tüm bash sürümleri için (eski bash):
$ echo "${a[ ${#a[@]}-1 ]}" # spaces added **only** for readability
ee
@
Konumsal argümanlar için (bash 2.01'den beri):
$ set aa bb cc dd ee
$ echo "${@:(-1)} ${@:~0} ${@: -1} ${@:$#} ${!#}"
ee ee ee ee
Tüm mermiler için portatif bir çözüm eval kullanmaktır:
eval printf '"%s\n"' \"\${$#}\"
$@
tam olarak bir dizi değil (abone olamaz). Bunun için, bir kabuk betiğine geçen son argümanı alma bölümüne bakın .