gpt4 book ai didi

bash - 使用getopts处理长和短命令行选项

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:05 24 4
gpt4 key购买 nike

我希望使用我的shell脚本来调用命令行选项的长短形式。

我知道可以使用getopts,但是像在Perl中一样,我无法对shell进行同样的操作。

关于如何完成此操作的任何想法,这样我就可以使用以下选项:

./shell.sh --copyfile abc.pl /tmp/
./shell.sh -c abc.pl /tmp/


在上面,这两个命令对我的shell意味着相同的东西,但是使用 getopts,我无法实现这些功能吗?

最佳答案

可以考虑以下三种实现:


Bash内置getopts。这不支持带有双破折号前缀的长选项名称。它仅支持单字符选项。
独立getopt命令的BSD UNIX实现(MacOS使用的命令)。这也不支持长选项。
独立getopt的GNU实现。 GNU getopt(3)(在Linux上由命令行getopt(1)使用)支持解析长选项。




其他一些答案显示了使用bash内置的getopts模仿长选项的解决方案。该解决方案实际上提供了一个简短的选项,其字符为“-”。因此,您将获得“-”作为标志。然后,紧随其后的所有内容将变为OPTARG,然后使用嵌套的case测试OPTARG。

这很聪明,但有一些警告:


getopts无法执行opt规范。如果用户提供的选项无效,则不会返回错误。解析OPTARG时,您必须执行自己的错误检查。
OPTARG用于长选项名称,当长选项本身具有参数时,会使用法复杂化。您最终不得不自己编写代码,作为另外一种情况。


因此,尽管有可能编写更多代码来解决对长选项的缺乏支持的问题,但这样做的工作量更大,并且部分抵消了使用getopt解析器简化代码的目的。

关于bash - 使用getopts处理长和短命令行选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23631676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com