由 Martin Weitzel <@mikros.systemware.de:martin@mwtech.uucp> Maarten Litmaath 提供的答案:
若你能确定参数不会超过九个的话,可用:
eval last=/${$#}
在符合 POSIX 标准的 shell 里,不管有多少个参数都可用上述的方法。
底下方法是一定有用的:
for last do : done
更一般性的做法是:
for i do third_last=$second_last second_last=$last last=$i done
若你想做的是将最后一个参数去除或是将一堆参数的顺序反过来或是取用 第 N 个参数。底下是一个不用造出 subPRocess 只用 shell 组建功能的 做法:
t0= u0= rest='1 2 3 4 5 6 7 8 9' argv=
for h in '' $rest do for t in "$t0" $rest do for u in $u0 $rest do case $# in 0) break 3 esac eval argv$h$t$u=/$1 argv="$argv /"/$argv$h$t$u/"" # (1) shift done u0=0 done t0=0 done
now restore the arguments val set x "$argv" # (2) hift