0

我有一个案例脚本如下:

 for i in "$@"; do
arg=( $@ )
    case $i in
 --string)
          for ((i=0; i<${#arg[@]}; i++)) ; do
           if [ "${arg[$i]}" == "--string" ] ; then
                ((i++))
                 STRING=${arg[$i]}
           fi
          done
          ;;
*)
          print_help
          exit
          ;;
  esac
done

当我运行 ./test --some_command --string 模式时;它打印帮助选项。当我在字符串中不带 *) 选项运行 ./test --some_command --string 模式时,它可以工作。

你能告诉我如何解决这个问题。

另一个例子 :

#!/bin/bash

test(){

        echo i am testing this now
}

print_help()
{
  echo help
}

for i in "$@"; do
arg=( $@ )
    case $i in
 --string)
          for ((i=0; i<${#arg[@]}; i++)) ; do
           if [ "${arg[$i]}" == "--string" ] ; then
                ((i++))
                 STRING=${arg[$i]}
           fi
          done
                echo $STRING
          ;;
 --test)
        test
        ;;

 *)
          print_help
          exit
          ;;
  esac
done

当我运行 ./test --string pattern --test. 它打印模式帮助

4

1 回答 1

3

当 for 循环到达“模式”时,它不会被 case 分支覆盖,因此它会命中默认分支并打印帮助。您必须以更智能的方式迭代参数。将 forfor循环替换为

while (( $# > 0 )); do
    arg=$1
    shift
    case $arg in
        --string) STRING=$1; shift; echo "$STRING" ;;
        --some-command) : ;;
        --) break ;;
        *) print_help; exit ;;
    esac
done
于 2013-11-05T17:37:03.267 回答