本文介绍了bash的论点案例中的$ args @的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可选的参数一长串的脚本。一些有关联的值。

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=$argdo 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 @的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 12:18