【发布时间】:2018-06-03 02:53:36
【问题描述】:
所以我希望能够使用 -h 选项来显示帮助详细信息。我有:
while getopts ":h:d:n" opt; do
case $opt in
h) help="true" >&2
;;
d) vdir="$OPTARG"
;;
n) vname="$OPTARG"
;;
\?) echo "Error: Invalid option -$OPTARG" >&2
echo "Please use -h for more information"
exit 1
;;
esac
done
# If -h was used, display help and exit
if [ "$help" = "true" ]; then
echo "Help details"
fi
当我传递 -d 或 -n 的详细信息(例如 program -d /var/test/)时,它会很好地接收它们。但是,当我执行程序 -h 之类的操作时,它不起作用。
当我在 case 语句中执行 h) 选项时,我也尝试过回显一行,但是,它没有得到回显。似乎当我执行 -h 时它不起作用,我也必须发送一个值(例如 program -h "test"),它会执行所需的操作。
如果我执行程序 -p 之类的操作,它会根据需要显示错误消息,但 -h 什么也不做。
【问题讨论】:
-
为什么要为
h指定:标志?这指定它需要一个 optarg,它显然不需要。 -
你为什么要告诉 getopts 消除错误(通过指定前导
:)?如果您没有将其置于该模式,您会知道问题出在哪里,因为,嗯,会报告一个错误。 -
另外,鉴于您使用了
:,-n选项不会接受参数。您可能需要hd:n:或:hd:n:(取决于您是否要使用初始:来消除错误)。 -
谢谢你,这是我对 getopts 如何提取值的工作缺乏了解,现在这很有意义。
标签: bash named-parameters