读取函数内部的选项并将其 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}
是函数局部的,否则在多次调用该函数时会遇到意外行为。
我正在尝试编写一个函数来解析我的参数。这是它的样子:
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}
是函数局部的,否则在多次调用该函数时会遇到意外行为。