参数--help
,-h
或-?
常用于显示有关如何使用程序/脚本的信息。
所以人们可以像这样解析它们:
#!/bin/sh
# […]
case "$1" in
'' ) # no parameters
echo "something missing here"
--help|-?|-h ) # show help message
show_help
exit
;;
*)
# do something else…
;;
esac
传递--help
和-h
有效。但是,当我将-?
传递给它时,它会因错误而失败:
zsh:找不到匹配项: - ?
现在即使使用简单的if循环也失败了:
if [ "$1" = "-?" ]; then
show_help
exit
fi
请注意,传递"-?"
或'-?'
有效,但这很愚蠢,没有人这样做。
我也无法在bash中重现这一点,只能在zsh中重现。
答案 0 :(得分:2)
具有-?
帮助选项的程序示例为less
。很久以前,如果你没有参数运行它,就会说
Missing filename ("less -\?" for help)
因为-?
本身很脆弱。在与Bourne / Korn / POSIX兼容的shell中,它具有不同的行为,具体取决于当前目录中是否存在名称中包含2个字符且-
作为第一个字符的文件。
它不再说,因为-\?
是一个愚蠢的帮助选项。现在它说
Missing filename ("less --help" for help)
(如果没有为其他目的而采取-h
,肯定会这样做。
less -\?
仍然会像往常一样显示帮助,但不鼓励任何人使用它。
请遵循此示例。
答案 1 :(得分:1)
问号符号可能会解析为返回上次执行的命令的值。无论如何,用反斜杠保护它" \"应该防止将其解释为其他任何东西。
#!/bin/zsh
# […]
case "$1" in
'' ) # no parameters
echo "something missing here"
;;
--help|-\?|-h ) # show help message
show_help
exit
;;
*)
# do something else…
;;
esac