在Bourneshellscript里要怎么找出最后一个参数?
2006-03-05 11:33:37 来源:WEB开发网核心提示:由MartinWeitzelMaartenLitmaath提供的答案:若你能确定参数不会超过九个的话,可用:evallast=\${$#}在符合POSIX标准的shell里,在Bourneshellscript里要怎么找出最后一个参数?,不管有多少个参数都可用上述的方法,底下方法是一定有用的:forlastdo:don
由
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
Tags:Bourneshellscript 怎么 找出
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接