代码之家  ›  专栏  ›  技术社区  ›  MicWit

如何检查bash中是否传入了空的命名参数?

  •  0
  • MicWit  · 技术社区  · 6 年前

    所以我希望能够使用a-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”),它将做所需的事情。

    如果我执行类似于program-p的操作,它将按要求显示错误消息,-h只是不执行任何操作。

    1 回复  |  直到 6 年前
        1
  •  1
  •   MicWit    6 年前

    根据注释,-h没有值,因此不应该在它后面有a:

    while getopts "hd:n:" opt; do
    

    删除首字母:将产生错误。没有:h之后表示不需要值,而d和n之后表示需要值。