一起使用getopts和$ {1}

时间:2013-07-16 13:44:45

标签: bash getopts

我正在尝试编写一个可以同时使用$ {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选项。

1 个答案:

答案 0 :(得分: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