首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ksh "getopts“--取消选项

ksh "getopts“--取消选项
EN

Stack Overflow用户
提问于 2013-08-08 19:39:31
回答 1查看 371关注 0票数 3

我使用"getopts“ksh内建来处理命令行选项,我正在寻找一种干净/标准的方法来”取消“命令行上的选项。我不知道这是一个关于getopts的技术问题,还是更多的风格/标准问题。无论如何,我理解getopts从左到右处理它的arg(默认情况下是$*),我希望用它来允许选项的第二个规范“关闭”一个选项。

对于采用选项参数的选项,这不是问题。在我的getopts处理案例语句中,我只是说,对于"-x“选项,例如:

代码语言:javascript
运行
复制
x ) x_arg=$OPTARG
    ;;

最后一个命令行上的"-x“实例获胜,这就是我想要的。

问题在于不采用选项参数的选项。如果该选项只是一个开关/标志,那么我的case语句将只有如下内容:

代码语言:javascript
运行
复制
x ) x_specified=1
    ;;

使用这样的选项,我真正能做的就是在命令行中再次添加"-x“,同样的事情也会发生:"x_specified=1”再次被执行。“取消x_specified”的最佳/最简单/最简单/最标准的方法是什么?这是我的问题。

我曾希望调用getopts功能,允许"+“或"-”在选项字母之前,但似乎无法在getopts处理循环中判断"+“或"-”是否被使用。如果有一个方法来判断,那么我就可以采用"+“的标准来关闭设置。我能做的另一件事是:

代码语言:javascript
运行
复制
x ) if [[ -z $x_specified ]] ; then
        x_specified=1
    else
        unset x_specified
    fi
    ;;

现在,"-x“选项将是一个切换;每次在命令行上看到该选项时,设置都会发生变化。但是,我希望命令行上有一种方式,“关闭-x设置”,而不仅仅是“切换-x设置”。我也可以选一些其他的字母。"X",作为关闭它的方法,但我的许多脚本已经使用大写和小写版本的同一字母来表示不同的东西,如果我必须选择其他随机字母来表示“关闭-x”,那就不是很好的记忆了,而且我的脚本已经很难学会如何使用了。

最后,您可能会问,“如果您希望在命令行上关闭-x,那么首先为什么要打开它?”在我的脚本中的选项处理经历了一个多步骤的过程。检查命令行选项,并检查配置文件中的选项,这两者之间有一定的优先级。对于采用选项参数的选项,这一切都很好,但是对于没有选项的选项,方案会分崩离析。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-08 20:12:12

我得到了ksh93,如果optstring以“+”开头,它允许+选项:

代码语言:javascript
运行
复制
while getopts +abc opt; do
    echo "have option '$opt'"
done

运行此命令:

代码语言:javascript
运行
复制
$ ./args.ksh -a -b -c +b -b foo 
have option 'a'
have option 'b'
have option 'c'
have option '+b'
have option 'b'
$ ksh --version
  version         sh (AT&T Research) 93u+ 2012-08-01

我在手册中看到了一个歧义:它说":“选项也必须是optstring中的”领导“字符。

http://linux.die.net/man/1/ksh93

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18134669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档