mảng
(Các) thay thế cũ nhất trong bash (Kể từ bash 3.0+) là:
$ a=(aa bb cc dd ee)
$ echo "${a[@]:(-1)} ${a[@]: -1} ${a[@]:(~0)} ${a[@]:~0}"
ee ee ee ee
Không gian được yêu cầu để tránh việc giải thích :
theo sau là một điểm trừ -
khi mở rộng "${var:-abc}"
(Sử dụng các giá trị mặc định).
Đây ~
là một phủ định bit bit số học (tương đương với phần bù của một hoặc lật tất cả các bit ). Từ người đàn ông bash:
ĐÁNH GIÁ ARITHMETIC
! ~ logical and bitwise negation
Kể từ bash-4.2 + cũng:
$ echo "${a[-1]} ${a[(~0)]}"
ee ee
Kể từ bash 5.0+ cũng:
$ echo "${a[~0]}"
ee
Đối với tất cả các phiên bản bash (bash cũ hơn):
$ echo "${a[ ${#a[@]}-1 ]}" # spaces added **only** for readability
ee
@
Đối với các đối số vị trí (kể từ bash 2.01):
$ set aa bb cc dd ee
$ echo "${@:(-1)} ${@:~0} ${@: -1} ${@:$#} ${!#}"
ee ee ee ee
Một giải pháp di động cho tất cả các vỏ là sử dụng eval:
eval printf '"%s\n"' \"\${$#}\"
$@
không chính xác là một mảng (không thể được đăng ký). Đối với nó, xem Lấy đối số cuối cùng được chuyển đến một tập lệnh shell .