【问题标题】:Can a shell script flag have optional arguments if parsing with getopts?如果使用 getopts 解析,shell 脚本标志可以有可选参数吗?
【发布时间】:2019-02-04 12:32:52
【问题描述】:

我有一个脚本,我想以三种方式运行:

  1. 没有标志 -- ./script.sh
  2. 有标志但没有参数 -- ./script.sh -u
  3. 带有带参数的标志 -- ./script.sh -u username

有没有办法做到这一点?

在阅读了一些指南(例如 herehere)之后,这似乎不太可能,特别是如果我想使用 getopts

我可以使用getopts 执行此操作,还是需要以另一种方式解析我的选项?如果可以的话,我的目标是继续使用getopts

【问题讨论】:

  • @CharlesDuffy 我相信 OP 是在谈论可选的 参数,而不是标志。我认为getopts 是不可能的。
  • 选项参数,而不是位置参数,然后呢? 更有意义。也就是说,BashFAQ #35(在问题中链接!)确实显示了一种支持它们使用的(非getopts-based)方法。
  • 如果我的问题不是很明显,我应该改写它吗?
  • 当然。其实我有误会,所以如果你不介意的话,我可能会尝试自己改写一下......
  • @CharlesDuffy 去吧。

标签: shell posix getopts


【解决方案1】:

BashFAQ #35 中的非getopts 示例可以涵盖用例:

user_set=0  # 1 if any -u is given
user=       # set to specific string for -u, if provided
while :; do
  case $1 in
    -u=*) user_set=1; user=${1#*=} ;;
    -u)   user_set=1
          if [ -n "$2" ]; then
            user=$2
            shift
          fi ;;
    --)   shift; break ;;
    *)    break ;;
  esac
  shift
done

【讨论】:

  • 忘记了“;;”在“fi”之后......我想。
猜你喜欢
  • 2017-01-05
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2017-01-11
相关资源
最近更新 更多