由
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