0

我正在尝试编写一个可以同时使用 ${1} 和 getopts 选项的脚本。我希望它使用使用行工作:

./test_script test -a

打印:

test
-a was triggered!

我试过了

echo ${1};

while getopts "c:a" opt; do
      case $opt in
    a)
      echo "-a was triggered!" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
    esac
done

这无法让我同时访问 ${1} 并检测到 -a 选项被同时使用。有没有办法同时使用这两种方法?我想避免将测试字符串变成另一个 getopts 选项。

4

1 回答 1

1

当 getopts 退出时,您可以使用shift 。例如:

while [ $# -gt 0 ] ; do
    while getopts "c:a" opt ; do
        case $opt in
            # YOUR OPTIONS
        esac
    done

    OTHER_VALUE=$1
    shift
done

PS:通常我不使用getopts,但我更喜欢自己解析args,如下所示:

while [ $# -gt 0 ] ; do
    case "$1" in
        '-a' | '--along' ) 
            echo '-a was triggered' ;;
        '-b' | '--blong' ) 
            echo '-b was trigger with arg ' $2 ; 
            shift ;; # One extra shift for the argumnent $2
        * ) 
            echo 'Unknown value (maybe test)' ;;
    esac
    shift
done
于 2013-07-16T14:42:42.920 回答