无法识别的选项错误:shell中的getopt命令

时间:2015-02-26 23:18:09

标签: bash shell getopt

我是shell和Linux的新手,如果有人可以帮我找到命令中的错误,那就太棒了:

if ! options=$(getopt -n myscript -l a:,b:,cc:,dd:,ee:,ff:,gg:,hh: -- "$@"); then exit 1; fi

我收到错误消息:

mhagent: unrecognized option '--hh'
options=' --aa '\''val1'\'' --ibb '\''val2'\'' --cc '\''val4'\'' --dd '\''val4'\'' --ee '\''val5'\'' --ff '\''val6'\'' --gg '\''val7'\'' --'

如果我删除最后一个选项:hh,它可以正常工作。

if ! options=$(getopt -n myscript -l a:,b:,cc:,dd:,ee:,ff:,gg: -- "$@"); then exit 1; fi

1 个答案:

答案 0 :(得分:3)

免责声明:此答案假设您使用的是来自util-linux的getopt

好的,这一点都不明显,但你必须指定一个optstring(IE是一个你想接受的短选项列表)。假设您不想接受任何短选项,只需传递一个空字符串。

这里是概要:

getopt optstring parameters
getopt [options] [--] optstring parameters
getopt [options] -o|--options optstring [options] [--] parameters

请注意,所有3种形式都需要optstring。

由于您需要传递-l,因此您必须使用其中一个选项,因此您对getopt的调用应该是:

getopt -n myscript -l a:,b:,cc:,dd:,ee:,ff:,gg:,hh: -- '' "$@"

或:

getopt -n myscript -l a:,b:,cc:,dd:,ee:,ff:,gg:,hh: -o '' -- "$@"