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

时间:2018-06-03 02:53:37

标签: bash named-parameters

所以我希望能够使用-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的详细信息(例如,程序-d / var / test /)时,它会很好地接收它们。但是,当我执行类似程序-h的操作时,它不起作用。

当我在case语句中执行h)选项时,我也尝试回显一行,但是,它没有得到回显。似乎当我做-h它不起作用时,我也必须发送一个值(例如程序-h" test")并且它会做什么。

如果我执行类似程序-p的操作,它会根据需要显示错误消息,-h只会执行任何操作。

1 个答案:

答案 0 :(得分:1)

根据评论,-h没有值,所以不应该有:在它之后,所以该行应该是:

while getopts "hd:n:" opt; do

删除初始:会出错。没有:在h之后意味着它不需要值,而在d和n之后意味着它们需要一个值。