在Bourneshellscript里要怎么找出最后一个参数?
ReadyGo!技术成就梦想
网络搜索
efish
2008-2-24 2:50:17
由
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
这个例子可以用到 999 个参数,应该够用了吧?仔细看看(1)与(2)标示的
地方,想办法说服你自己不管参数里面有什么奇怪的字元这两行都不会出
差错。
要找第 N 个参数,用:
eval argN=\$argv$N
要将参数的顺序反过来,标示为(1)的那一行必须改成
argv="\"\$argv$h$t$u\" $argv"
自己练习最后一个参数去除的方法。
若允许呼叫外部指令这类造出 subprocess 的做法,代志就更好办了。
底下是找出 argvN:
N=1
for i
do
eval argv$N=\$i
N=`expr $N 1`
done
要将参数的顺序反过来还有一个不用造出 subprocess,有更简单的方法。
这个方法也可以用来去除最后一个参数, 不过要注意的是 argvN 不在是
原来的第 N 个参数:
argv=
for i
do
eval argv$#=\$i
argv="\"\$argv$#\" $argv"
shift
done
eval set x "$argv"
shift
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
这个例子可以用到 999 个参数,应该够用了吧?仔细看看(1)与(2)标示的
地方,想办法说服你自己不管参数里面有什么奇怪的字元这两行都不会出
差错。
要找第 N 个参数,用:
eval argN=\$argv$N
要将参数的顺序反过来,标示为(1)的那一行必须改成
argv="\"\$argv$h$t$u\" $argv"
自己练习最后一个参数去除的方法。
若允许呼叫外部指令这类造出 subprocess 的做法,代志就更好办了。
底下是找出 argvN:
N=1
for i
do
eval argv$N=\$i
N=`expr $N 1`
done
要将参数的顺序反过来还有一个不用造出 subprocess,有更简单的方法。
这个方法也可以用来去除最后一个参数, 不过要注意的是 argvN 不在是
原来的第 N 个参数:
argv=
for i
do
eval argv$#=\$i
argv="\"\$argv$#\" $argv"
shift
done
eval set x "$argv"
shift
-
相关文章
如何让setuid的shellscript可以使用?
如何让setuid的shellscript可以使用?
shell要如何分类呢?
shell要如何分类呢?
Shell介绍
Shell介绍
Linux程式设计-11.ShellScript(bash)--(1)简介
Linux程式设计-11.ShellScript(bash)--(1)简介
Linux程式设计-11.ShellScript(bash)--(2)教学例
Linux程式设计-11.ShellScript(bash)--(2)教学例
Linux程式设计-11.ShellScript(bash)--(3)用於自动备…
Linux程式设计-11.ShellScript(bash)--(3)用於自动备份的ShellScript
Linux程式设计-11.ShellScript(bash)--(4)档案系统检…
Linux程式设计-11.ShellScript(bash)--(4)档案系统检查
Linux程式设计-11.ShellScript(bash)--(5)控制圈for
Linux程式设计-11.ShellScript(bash)--(5)控制圈for
Linux程式设计-11.ShellScript(bash)--(6)流程控制c…
Linux程式设计-11.ShellScript(bash)--(6)流程控制case
Linux程式设计-11.ShellScript(bash)--(7)流程控制s…
Linux程式设计-11.ShellScript(bash)--(7)流程控制select
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn
