引自thePOSIX.1-2008descriptionabout-Woption,The-W(capital-W)optionshallbereservedforvendoroptions.引自Linux手册页,GNUgetopthandles-Woptionasfollows:IfoptstringcontainsWfollowedbyasemicolon(;),then-Wfooistreatedasthelongoption--foo.(The-WoptionisreservedbyPOSIX.2forimplementationextensions.)有人能以更清楚(直截了当
我(大概是每个人)时常遇到这个问题,但我自己找不到任何好的解决方法。当getopts寻找一个参数时,它实际上接受了下一个参数,即使它是一个选项。这就是我为阻止它所做的(代码片段):#!/bin/bashfunctionoptsGet(){whilegetopts":c:f"opt;docase$optinc)[[-z"${OPTARG}"||"${OPTARG}"==-*]]\&&{echo-e"ERROR:Invalidargument\n";exit1;}CNAME="${OPTARG}.tEsTsTr";;f)FORCE=true;;\?)echo-e"Invalidoption
我(大概是每个人)时常遇到这个问题,但我自己找不到任何好的解决方法。当getopts寻找一个参数时,它实际上接受了下一个参数,即使它是一个选项。这就是我为阻止它所做的(代码片段):#!/bin/bashfunctionoptsGet(){whilegetopts":c:f"opt;docase$optinc)[[-z"${OPTARG}"||"${OPTARG}"==-*]]\&&{echo-e"ERROR:Invalidargument\n";exit1;}CNAME="${OPTARG}.tEsTsTr";;f)FORCE=true;;\?)echo-e"Invalidoption
做一个合适的Linux/unix风格的应用程序,什么是最好的选择(例如afaikls使用getopt_long但例如ffmpeggetopt_long_only)。你推荐哪一个?干杯, 最佳答案 在我看来,以下情况通常是正确的:用户喜欢长而自然的语言选项,因为它们易于内存。编写脚本来包装具有数百个选项的程序的用户喜欢短选项。如果一个程序变得足够大,它最终会用完与规范选项相比具有任何意义的短选项组合。例如,-Z可能与以完全不同的字母开头的长选项相同。到时候,特别是对于单个维护者来说,option解析代码就成了一个维护起来很头疼的问题。
做一个合适的Linux/unix风格的应用程序,什么是最好的选择(例如afaikls使用getopt_long但例如ffmpeggetopt_long_only)。你推荐哪一个?干杯, 最佳答案 在我看来,以下情况通常是正确的:用户喜欢长而自然的语言选项,因为它们易于内存。编写脚本来包装具有数百个选项的程序的用户喜欢短选项。如果一个程序变得足够大,它最终会用完与规范选项相比具有任何意义的短选项组合。例如,-Z可能与以完全不同的字母开头的长选项相同。到时候,特别是对于单个维护者来说,option解析代码就成了一个维护起来很头疼的问题。
我正在创建一个基本脚本,它应该包含3个强制命令行选项,并且每个选项后面都必须跟一个值。像这样:$myscript.sh-u-p-f我试图确保用户传递的是这3个确切的选项及其值,而不是其他任何东西,否则我想打印使用消息并退出。我一直在阅读关于getopts的文章并想出了这个:usage(){echo"Usage:$0-u-p-f";}if[$#-ne6]thenusageexit1fiwhilegetoptsu:p:f:opt;docase$optinu)USER_NAME=$OPTARG;;p)USER_PASSWORD=$OPTARG;;f)HOSTS_FILE=$OPTARG;;*
我正在创建一个基本脚本,它应该包含3个强制命令行选项,并且每个选项后面都必须跟一个值。像这样:$myscript.sh-u-p-f我试图确保用户传递的是这3个确切的选项及其值,而不是其他任何东西,否则我想打印使用消息并退出。我一直在阅读关于getopts的文章并想出了这个:usage(){echo"Usage:$0-u-p-f";}if[$#-ne6]thenusageexit1fiwhilegetoptsu:p:f:opt;docase$optinu)USER_NAME=$OPTARG;;p)USER_PASSWORD=$OPTARG;;f)HOSTS_FILE=$OPTARG;;*
我正在尝试在bash中使用getopts处理命令行参数。其中一项要求是处理任意数量的选项参数(不使用引号)。第一个例子(只获取第一个参数)madcap:~/projects$./getoptz.sh-sabc-swastriggeredArgument:a第二个例子(我希望它表现得像这样,但不需要引用参数"madcap:~/projects$./getoptz.sh-s"abc"-swastriggeredArgument:abc有办法吗?这是我现在的代码:#!/bin/bashwhilegetopts":s:"opt;docase$optins)echo"-swastriggered
我正在尝试在bash中使用getopts处理命令行参数。其中一项要求是处理任意数量的选项参数(不使用引号)。第一个例子(只获取第一个参数)madcap:~/projects$./getoptz.sh-sabc-swastriggeredArgument:a第二个例子(我希望它表现得像这样,但不需要引用参数"madcap:~/projects$./getoptz.sh-s"abc"-swastriggeredArgument:abc有办法吗?这是我现在的代码:#!/bin/bashwhilegetopts":s:"opt;docase$optins)echo"-swastriggered
这个问题在这里已经有了答案:ParsingCommandLineArgumentsinC++?[closed](42个答案)关闭2个月前。我知道getopts和argp.我刚刚查看了boost,它们将program_options作为用于解析命令行参数的库。我不确定使用哪一个。我知道getopts是POSIX,而argp不是,但这对我来说并不重要。重要的是易用性。你能推荐(优点/缺点吗?)一个。我也对其他图书馆开放。