繁体   English   中英

如何在zsh / shell脚本中解析问号作为参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM