在bash中为单个参数捕获多个值

在bash中为单个参数捕获多个值,bash,Bash,我有这样一个bash脚本: usage="setup.sh [-localsource path to dir] [-help]"; for i in $@ do if [ "$localSourceOpt" = 1 ] then localSource=$i localSourceOpt=0; fi if [ "$i" = "-localsource" ]

我有这样一个bash脚本:

usage="setup.sh [-localsource path to dir] [-help]";

 for i in $@
    do
        if [ "$localSourceOpt" = 1 ]
        then
            localSource=$i
            localSourceOpt=0;
        fi
        if [ "$i" = "-localsource" ]
        then
            localSourceOpt=1;
        fi
        if [ "$i" = "-help" ]
        then
            echo "$usage";
            exit;
        fi
    done
这需要一个论点

setup.sh -localsource PATH 
我需要的是添加另一个可能有多个参数值的参数,例如

 setup.sh -localsource PATH  -locbranches one two three 
我应该做什么来捕获传递给参数“-locbranchs”的值


提前感谢

我注意到您需要编写大量逻辑代码来处理最简单的命令行参数机制,我可能建议您使用
bash

这使得单参数选项的工作变得微不足道。对于多个参数,它不能很好地工作,您必须引用参数,例如
-选项“1 2 3”
。但是,在以下场景中,它会处理多个参数

setup.sh -localsource PATH one two three 
i、 e.
1233
未链接到任何命令行选项。另一种方法是为每个参数指定选项,例如

setup.sh -localsource PATH -locbranch one -locbranch two -locbranch three

您可以使用4种情况进行切换(-localsource、-LocBranchs、-help和default),在每种情况下,您都应该输入一种状态

for i in $@; do
  case "$i" in

   "-help") echo "$usage"
            ;;
   "-localsource") STATE="localsource"
                 ;;
   "-locbranches") STATE="locbranches"
                 ;;
   *) 
          if [ "$STATE" == "localsource" ]; then
             PATH=$i
          elif [ "$STATE" == "locbranches"]; then
             # do something with argv from locbrances
          else
             echo "Wrong state!"
          fi
          ;;
  esac
done

setup.sh-localsource PATH-locbranch one-locbranch two-locbranch three
似乎是一种简单的方法。我认为这很简单,也很直观