在 getopts 中接受参数的解析选项
Parsing options that take arguments in getopts
我有以下程序 foo
,它可以采用三个可选标志之一,f
、g
或 s
:
usage()
{
echo "Use this correctly"
}
while getopts "fgs" opt; do
case $opt in
f)
echo f
foo="$OPTARG"
echo $foo
;;
g)
echo g
foo="g"
;;
s)
echo s
foo="s"
;;
esac
done
if [ -z "$foo" ]
then
usage
exit
fi
echo $foo
exit
当我执行 foo -g
或 foo -s
时,我得到了预期的输出:
g
g
和
s
s
分别。但是当我 foo -f bar
我期望
f
bar
bar
但得到
f
Use this correctly
表示 $foo
在 -f
的情况下没有正确设置。我做错了什么?
你必须更换
while getopts "fgs" opt; do
与
while getopts "f:gs" opt; do
带参数的选项后面必须跟一个冒号。仅对于这些选项,getopts
设置 OPTARG
变量。
我有以下程序 foo
,它可以采用三个可选标志之一,f
、g
或 s
:
usage()
{
echo "Use this correctly"
}
while getopts "fgs" opt; do
case $opt in
f)
echo f
foo="$OPTARG"
echo $foo
;;
g)
echo g
foo="g"
;;
s)
echo s
foo="s"
;;
esac
done
if [ -z "$foo" ]
then
usage
exit
fi
echo $foo
exit
当我执行 foo -g
或 foo -s
时,我得到了预期的输出:
g
g
和
s
s
分别。但是当我 foo -f bar
我期望
f
bar
bar
但得到
f
Use this correctly
表示 $foo
在 -f
的情况下没有正确设置。我做错了什么?
你必须更换
while getopts "fgs" opt; do
与
while getopts "f:gs" opt; do
带参数的选项后面必须跟一个冒号。仅对于这些选项,getopts
设置 OPTARG
变量。