读取函数内的选项并将其作为值返回

时间:2017-12-06 14:33:40

标签: linux bash getopts

我试图写一个能解析我的论点的函数。这是它的样子:

opts_get(){
    CONFIG=()
    while getopts "f:" opt; do
        case $opt in
            f)
                CONFIG=$OPTARG
                ;;
            :)
                echo "Option -$OPTARG requires argument" 1>&2
                exit 1
                ;;
            \?)
                echo "Invalid option -$OPTARG" 1>&2
                exit 1
                ;;
        esac
    done
    echo $CONFIG
}

echo $(opts_get)

但不幸的是,即使我通过了-f sdf选项,它也会打印出空行。

如果我将阅读选项代码放在任何函数之外

CONFIG=()
while getopts "f:" opt; do
    case $opt in
        f)
            CONFIG=$OPTARG
            ;;
        :)
            echo "Option -$OPTARG requires argument" 1>&2
            exit 1
            ;;
        \?)
            echo "Invalid option -$OPTARG" 1>&2
            exit 1
            ;;
    esac
done
echo $CONFIG #prints what I want

1 个答案:

答案 0 :(得分:2)

你没有传递函数的参数。您需要将它从脚本传递给函数,如下所示。

echo $(opts_get "$@")

2 nd 案例有效,因为命令行的位置参数由getopts直接读取。还要将变量初始化修复为CONFIG=""而不是数组声明。

您还需要确保${OPTIND}是函数的本地函数,方法是取消设置或将其声明为本地函数,否则在多次调用函数时会遇到意外行为。