首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mac : Bash GetOpts有时被忽略

Mac : Bash GetOpts有时被忽略
EN

Stack Overflow用户
提问于 2018-03-01 01:17:32
回答 1查看 201关注 0票数 1

我在bash_profile中写了一个小的bash脚本。我想使用getopts来解析选项。

代码语言:javascript
代码运行次数:0
运行
复制
deployMenu() {
  noInstallDependencies='false'
  build='true'
  echo "Args: $@"

  while getopts 'db' flag; do
    echo "flag ${flag}"
    case "${flag}" in
      d) noInstallDependencies='true' ;;
      b) build='false' ;;
      #*) echo "Unexpected option ${flag}" ;;
      #\?) echo "Unexpected option ${flag}" ;;
    esac
  done

  echo "noInstallDependencies $noInstallDependencies"
  echo "build $build"

如果我多次运行该命令,该参数将被忽略。我必须运行diff。标志,以便识别它。

代码语言:javascript
代码运行次数:0
运行
复制
User:project User$ deployMenu -b
Args: -b
noInstallDependencies false
build true

User:project User$ deployMenu -b
Args: -b
noInstallDependencies false
build true

User:project User$ deployMenu --b -b
Args: --b -b
flag b
noInstallDependencies false
build false

User:project User$ deployMenu --b -b
Args: --b -b
noInstallDependencies false
build true

正如您所看到的,只有在将参数从-b更改为--<something> -b之后,才能识别该标志。我最初认为第一个参数被忽略了,但是运行两次--b -b也失败了。是否有需要先重置的缓存或其他内容?要让它工作,首先使用-b,然后切换到--b -b是可重复的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-01 01:39:30

由于您在同一shell实例中重复调用shell函数,因此不会在两次调用deployMenu之间重置$OPTIND的值。这会影响getopts在每次调用时将哪个选项视为“下一步”。尝试使用deployMenu ...; echo $OPTIND进行相同的实验。如果您计划多次调用deployMenu,那么解决方案可能就是显式地设置OPTIND=1

代码语言:javascript
代码运行次数:0
运行
复制
deployMenu() {
  noInstallDependencies='false'
  build='true'
  echo "Args: $@"
  OPTIND=1

  while getopts 'db' flag; do
   ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49035174

复制
相关文章

相似问题

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