我创建了一个带有参数和参数的脚本。我想插入--help
论点。
我已经知道如何用 解析普通参数-
,但我不知道如何解析这些--
参数。
为了解析 的选项test.sh -h
,我使用以下检查:
while getopts ":h" opt;
do
case $opt in
h ) {
echo "help!!!"
exit 1
} ;;
esac
done
但我希望可以选择使用test.sh --help
.
PS 我正在使用 Ubuntu 12.04...但这并不重要。
答案1
getopts
无法处理长参数:
$ ( set -- --help ; while getopts -- -help opt; do echo "$opt"; done )
-
h
e
l
p
如果你想处理长参数,你需要编写自己的解析器。
GNU 版本getopt
做支持解析长选项,但最好不要使用它;它不可移植,而且非 GNU 版本在某些类型的参数上容易出错。例如,它们通常无法正确解析包含空格的参数。
答案2
问题的作者提供了这个解决方案:
我在 /usr/bin 的 .sh 脚本之一中找到了解决方案
if test "$#" -eq 1; then case "$1" in --help | --hel | --he | --h ) func_usage; exit 0 ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version; exit 0 ;; esac fi
克里斯·唐对此的评论:
就像我说的,如果你想处理长参数,你需要编写自己的解析器——[你找到的]脚本就是一个例子。
根据记录,您发现的脚本写得很糟糕。例如,
--version
部分匹配可以重写为--v*
)(假设您同意--vfoo
)。