我有以下程序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
。我在做什么错了?
答案 0 :(得分:3)
您必须替换
while getopts "fgs" opt; do
使用
while getopts "f:gs" opt; do
带有参数的选项必须后跟一个冒号。仅对于这些选项,getopts
设置OPTARG
变量。