问题描述
我有一个可选的参数一长串的脚本。一些有关联的值。
I have a script with a long list of OPTIONAL arguments. some have associated values.
如:
.script --first 2012-12-25 --last 2012-12-26 --copy --remove
.script --first 2012-12-25
因此,接下来的case语句:
Thus the following case statement:
for arg in "$@"
do
case $arg in
"--first" )
START_DATE=$arg;;
"--last" )
END_DATE=$arg;;
"--copy" )
COPY=true;;
"--remove" )
REMOVE=true;;
# ... and so on
esac
done
我的问题:
这需要一个增量 $ ARG + 1
类型语句获取以下ARG(在某些情况下)。
My problem:
that needs a increment $arg+1
type statement to get the following arg (in some cases).
这怎么可能?
我也乐于做一个这样子 .script --first2012-12-25 --last2012-12-26
I'm also happy to do a substring such .script --first2012-12-25 --last2012-12-26
和不知道如何继续存在。
and not sure how to proceed there.
推荐答案
getopts的不能拥有它似乎可选参数。反之则大。
getopts cannot have optional arguments it seems. otherwise great.
我的解决方案
循环 $ @
键,X = $ ARG 设置变量等于
这样做的情况下开关变量(而不是ARG)
loop the $@
and setting a variable equal to x=$arg
do the case switch on that variable (rather than arg)
这是该类型参数正常工作 - 开始日期2012-12-25 --enddate 2012年12月29日
但没有奏效 - 删除
不具有下列参数
but did not work for --remove
that has no following argument.
因此东西(不可能参数)钉在到ARG字符串。
therefore tack on stuff (unlikely argument) onto the arg string.
留下以下
argc="$@ jabberwhocky"
echo $argc
x=0
# x=0 for unset variable
for arg in $argc
do
case $x in
"--start" )
STARTDATE=$arg ;;
"--end" )
ENDDATE=$arg ;;
"--copy" )
COPY=true;;
"--remove" )
REMOVE=true;;
...等等...
... and so on....
esac
x=$arg
done
这篇关于bash的论点案例中的$ args @的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!