在没有$ @或$ *的posix shell脚本中将verbatim参数传递给getopts

时间:2014-03-12 07:35:00

标签: shell posix getopts

我试图将一个论点作为"逐字传递"对于我的脚本,问题是内部双引号""中的参数以双短划线/双连字符--开头。

这是一个例子

script.sh -f "--conf=bla"

在我的脚本中,$*$@都将此转换为

-f --conf=bla

当此事件到达getopts时,无法按照应有的方式解码此信息。

这就是我的getopts

foo()
{
    while getopts ":f:" vars
    do
            case ${vars} in 
                    f ) MYVAR=${OPTARG};;  
                    * ) Err; exit 1;;
            esac
    done
    shift $((OPTIND-1))
}

我想将--conf=bla存储在MYVAR内,我无法找到方法来执行此操作,显然我无法控制双引号被删除的方式一般来说,我无法将文字逐字传递到我的剧本中。

我如何控制这个?

1 个答案:

答案 0 :(得分:1)

$ cat t.sh
#!/bin/sh

foo()
{
        # unset OPTIND
        while getopts ":f:" vars
        do
                case ${vars} in
                        f) MYVAR=${OPTARG} ;;
                        *) echo "error"; exit 1 ;;
                esac
        done
        shift $((OPTIND-1))

        echo "\$MYVAR=[${MYVAR}]"
}

foo "$@"

$ ./t.sh -f "--conf=blah"
$MYVAR=[--conf=blah]

请详细说明?