在bash中的自定义getopts脚本中将参数作为选项传递

时间:2015-06-19 12:20:12

标签: bash getopt getopts

我想将选项作为参数传递。 E.g:

mycommand -a 1 -t '-q -w 111'

脚本无法识别引号中的字符串。即它只获得字符串的一部分。

getopts的工作原理相同 - 只能看到-q

对于自定义getopts,我使用类似的脚本(示例):

while :
do
    case $1 in
        -h | --help | -\?)
            # Show some help
            ;;
        -p | --project)
            PROJECT="$2"
            shift 2
            ;;
        -*)
            printf >&2 'WARN: Unknown option (ignored): %s\n' "$1"
            shift
            ;;
        *)  # no more options. Stop while loop
            break
            ;;
        --) # End of all options
        echo "End of all options"
            shift
            break
            ;;
    esac
done

1 个答案:

答案 0 :(得分:3)

也许我误解了这个问题,但getopts似乎对我有用:

while getopts a:t: arg
do
    case $arg in
        a)  echo "option a, argument <$OPTARG>"
            ;;
        t)  echo "option t, argument <$OPTARG>"
            ;;
    esac
done

执行命令

bash gash.sh -a 1 -t '-q -w 111'
option a, argument <1>
option t, argument <-q -w 111>

不是你想要的吗?也许你在带参数的选项之后错过了: