Linux 读取函数内的选项并将其作为值返回
我正在尝试编写一个函数来解析我的参数。下面是它的样子:Linux 读取函数内的选项并将其作为值返回,linux,bash,getopts,Linux,Bash,Getopts,我正在尝试编写一个函数来解析我的参数。下面是它的样子: opts_get(){ CONFIG=() while getopts "f:" opt; do case $opt in f) CONFIG=$OPTARG ;; :) echo "Option -$OPTARG requires argument" 1>&a
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 "$@")
第二种情况之所以有效,是因为命令行中的位置参数由getopts
直接读取。还要将变量初始化修改为仅CONFIG=”“
,而不是作为数组声明
您还需要通过取消设置函数或将其声明为本地,确保函数的
${OPTIND}
是本地的,否则在多次调用函数时会遇到意外行为。因此,如果函数是从另一个函数调用的。我应该先把参数传递给调用者函数,对吗?你是什么意思${OPTIND}
?@St.Antario:是的absolutely@St.Antario:它包含要处理的下一个参数的索引,如果您仅使用一个参数,则没有问题