shell输入参数的最佳实践?

时间:2014-01-11 07:35:09

标签: shell sh

我想使用标准shell编写工具。现在我有三种选择来处理用户的输入:

$ and loop
getopt
getopts

所以新生的问题是,考虑到可移植性,哪一个是我的最佳实践?

P.S。我的工具输入如下:

mytool.sh [-fl] [-c|--conf file]

因此,提供了三个参数:

  • -f
  • -l
  • -c | --conf

2 个答案:

答案 0 :(得分:1)

getopts无法满足您的需求,因为它不支持--conf等“长选项”。

getopt是可变的;一些实现支持长选项,有些则不支持。 (有些系统没有任何实现)。所以我猜测,因为你不想要一个特定于Bash的解决方案,你也不想使用getopt

这样你就可以编写自己的循环了。 。 。这实际上非常难看,特别是因为你不想在循环中使用任何特定于Bash的功能。

如果您只使用便携式构造很重要,我建议取消对长选项--conf的支持,以便您可以使用getopts。 (或者,您可以取消对合并选项表示法-fl的支持,因此编写自定义循环更容易,但这比使用getopts还要多。)

答案 1 :(得分:0)

getopt,这里的意思是通常找到/usr/bin/getopt的可执行实用程序(与各种shell中找到的同名内置命令相对)可能是与shell无关的长选项支持的最佳选择。传统的getopts内置函数根本不处理长选项,而实现它们的shell以相互不兼容的方式完成它。

您当然可以通过自己循环"$@"来实现完全自定义的选项处理逻辑,但使用标准工具通常是一个更好的主意。