แถว
ตัวเลือกที่เก่าแก่ที่สุดใน bash (ตั้งแต่ bash 3.0+) คือ:
$ a=(aa bb cc dd ee)
$ echo "${a[@]:(-1)} ${a[@]: -1} ${a[@]:(~0)} ${a[@]:~0}"
ee ee ee ee
จำเป็นต้องใช้พื้นที่เพื่อหลีกเลี่ยงการตีความ:
ตามด้วยเครื่องหมายลบ-
เป็นการขยาย"${var:-abc}"
(ใช้ค่าเริ่มต้น)
นี่~
คือการปฏิเสธแบบเลขคณิตในเลขคณิต(เทียบเท่ากับส่วนเติมเต็มหรือพลิกทุกบิต ) จากคนทุบตี:
การประเมินผลทางคณิตศาสตร์
! ~ logical and bitwise negation
ตั้งแต่ bash-4.2 + ด้วย:
$ echo "${a[-1]} ${a[(~0)]}"
ee ee
ตั้งแต่ทุบตี 5.0+ ด้วย:
$ echo "${a[~0]}"
ee
สำหรับทุกรุ่นทุบตี (ทุบตีเก่ากว่า):
$ 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"' \"\${$#}\"
$@
ไม่ใช่อาร์เรย์ (ไม่สามารถห้อยได้) มันเห็นการโต้แย้งที่ผ่านมาส่งผ่านไปยังสคริปต์เปลือก