读取函数内部的选项并将其 return 作为值

Reading options inside a function and return it as a value

我正在尝试编写一个函数来解析我的参数。这是它的样子:

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

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

echo $(opts_get "$@")

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

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