我试图写一个能解析我的论点的函数。这是它的样子:
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
答案 0 :(得分:2)
你没有传递函数的参数。您需要将它从脚本传递给函数,如下所示。
echo $(opts_get "$@")
2 nd 案例有效,因为命令行的位置参数由getopts
直接读取。还要将变量初始化修复为CONFIG=""
而不是数组声明。
您还需要确保${OPTIND}
是函数的本地函数,方法是取消设置或将其声明为本地函数,否则在多次调用函数时会遇到意外行为。