1

我有一个 shell 脚本,它使用getopt. 我的脚本的那部分很好,但是,我需要一种特殊情况,即可以多次提交一个特定参数。

这是我如何处理它的要点:

#!/bin/sh

i=0

# once in the case statement I do the following:
while true
do
   case "$1" in

   -p) 
      paramList[$i]=$2
      ((i++))
      shift 2
      ;;
done

这是正确填充paramList数组(我认为),但每当我尝试以下操作时:

for param in $paramList
do
   echo "Params: $param"
done

它只返回第一个参数。因此,如果我这样做./myscript -p blah -p blah2 -p blah3,它就会返回blah

我究竟做错了什么?

4

2 回答 2

1

您可以通过执行以下操作简单地创建一个数组:

paramList=( "$@" )

然后您可以通过执行以下操作迭代它们:

for param in "${paramList[@]}"
do
   echo "Params: $param"
done
于 2013-06-25T16:13:15.253 回答
1

在您的case声明中,您可以像这样简单地添加到数组中:

-p) 
   paramList+=( "$2" )
   shift 2
   ;;

不需要索引。

遍历数组:

for param in "${paramList[@]}"
do
   echo "Params: $param"
done
于 2013-06-25T16:17:02.053 回答