命名参数在 shell 函数中不起作用
Named parameters not working in shell function
我有这个 shell 脚本,它应该从命令行接受两个可选参数 start
和 end
:
function foo {
# -s : start
# -e : end
while getopts 's:e:' arg
do
case ${arg} in
s) start=${OPTARG};;
e) end=${OPTARG};;
*) return 1 # illegal option
esac
done
echo "start, end:"
echo $start, $end
unset start
unset end
}
我从运行中得到随机结果。这是运行列表(按时间顺序排列)及其输出:
1.
$ foo
start, end:
,
2.
$ foo -s 2011
start, end:
2011,
3.
$ foo -e 2015
start, end:
,
4.
$ foo -s 2011 -e 2016
start, end:
, 2016
5.
$ foo -s 2011 -e 2016
start, end:
,
6.
$ foo
start, end:
,
7.
$ foo -s 2011 -e 2016
start, end:
2011, 2016
8.
$ foo -s 2011 -e 2016
start, end:
,
请帮忙。需求就这么简单post的前两行。任何替代方法也都有效,但我很想知道我在这里做错了什么。 TIA.
由于调用了 getopts,您的函数设置了全局变量 OPTIND
。您可以通过在函数的开头添加 local OPTIND
来防止这种情况(您可能也想对变量 end
和 start
这样做)。
我有这个 shell 脚本,它应该从命令行接受两个可选参数 start
和 end
:
function foo {
# -s : start
# -e : end
while getopts 's:e:' arg
do
case ${arg} in
s) start=${OPTARG};;
e) end=${OPTARG};;
*) return 1 # illegal option
esac
done
echo "start, end:"
echo $start, $end
unset start
unset end
}
我从运行中得到随机结果。这是运行列表(按时间顺序排列)及其输出:
1.
$ foo
start, end:
,
2.
$ foo -s 2011
start, end:
2011,
3.
$ foo -e 2015
start, end:
,
4.
$ foo -s 2011 -e 2016
start, end:
, 2016
5.
$ foo -s 2011 -e 2016
start, end:
,
6.
$ foo
start, end:
,
7.
$ foo -s 2011 -e 2016
start, end:
2011, 2016
8.
$ foo -s 2011 -e 2016
start, end:
,
请帮忙。需求就这么简单post的前两行。任何替代方法也都有效,但我很想知道我在这里做错了什么。 TIA.
由于调用了 getopts,您的函数设置了全局变量 OPTIND
。您可以通过在函数的开头添加 local OPTIND
来防止这种情况(您可能也想对变量 end
和 start
这样做)。