[英]How to parse a question mark as parameter in zsh/shell script?
参数--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中重现。
一个带有-?
的程序的例子-?
帮助选项less
。 很久以前,如果你没有参数运行它,它会说
Missing filename ("less -\?" for help)
因为-?
本身就很脆弱。 在与Bourne / Korn / POSIX兼容的shell中,它具有不同的行为,具体取决于当前目录中是否存在名称中包含2个字符的文件,以及-
作为第一个字符。
它不再说了,因为-\\?
是一个愚蠢的帮助选项。 现在它说
Missing filename ("less --help" for help)
(如果没有用于其他目的,它肯定会带-h
)
less -\\?
仍然像往常一样显示帮助,但没有人鼓励使用它。
按照这个例子。
问号符号可能会解析为返回上次执行的命令的值。 无论如何,用反斜杠“\\”保护它应该防止将其解释为其他任何东西。
#!/bin/zsh
# […]
case "$1" in
'' ) # no parameters
echo "something missing here"
;;
--help|-\?|-h ) # show help message
show_help
exit
;;
*)
# do something else…
;;
esac
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.