在bourneshellscript里要怎么找出最后一个参数?_shell教程

如题所述

提供的答案:若你能确定参数不会超过九个的话,可用:eval last=\${$#}在符合 POSIX 标准的 shell 里,不管有多少个参数都可用上述的方法。底下方法是一定有用的:for lastdo:done更一般性的做法是:for idothird_last=$second_lastsecond_last=$lastlast=$idone若你想做的是将最后一个参数去除或是将一堆参数的顺序反过来或是取用第N 个参数。底下是一个不用造出 subprocess 只用 shell 组建功能的做法:t0= u0= rest=1 2 3 4 5 6 7 8 9 argv=for h in $restdofor t in "$t0" $restdofor u in $u0 $restdocase $# in0)break 3esaceval argv$h$t$u=\$1argv="$argv \"\$argv$h$t$u\"" # (1)shiftdoneu0=0donet0=0donenow restore the argumentsval set x "$argv" # (2)hift这个例子可以用到 999 个参数,应该够用了吧?仔细看看(1)与(2)标示的要找第 N 个参数,用:eval argN=\$argv$N要将参数的顺序反过来,标示为(1)的那一行必须改成argv="\"\$argv$h$t$u\" $argv"自己练习最后一个参数去除的方法。若允许呼叫外部指令这类造出 subprocess 的做法,代志就更好办了。底下是找出 argvN:N=1for idoeval argv$N=\$iN=`expr $N 1`done要将参数的顺序反过来还有一个不用造出 subprocess,有更简单的方法。这个方法也可以用来去除最后一个参数, 不过要注意的是 argvN 不在是
温馨提示:答案为网友推荐,仅供参考
相似回答