【问题标题】:What is the best way to parse command line options in bash shell?在 bash shell 中解析命令行选项的最佳方法是什么?
【发布时间】:2016-01-08 17:17:58
【问题描述】:

所以我有以下脚本来对我从here 得到的命令行选项进行排序:

optstring=h
unset options #deletes options
while(($#));
do
echo $item;
case $1 in
   -[!-]?*) # caso a opção seja do tipo -ab
      for ((i=1; i < ${#1}; i++));do # Loop sobre cada caracter
         c=${1:i:1}
         options+=("-$c")
      if [[ $optstring = *"$c:"* && ${1:i+1} ]];
      then
            options+=("${1:i+1}")
            break
      fi
    done;;
    #type --foo=bar
    --*[^=*]) options+=("${1%%=*}") ;
              echo "${options[@]}";;

    #THIS ONE IS NOT WORKING IDK WHY
    --?*=*) options+=("${1%%=*}" "${1#*=}") ;
            echo "${options[@]}";;
    # adds --endopts for --
    --) options+=(--endopts) 
        echo "${options[@]}";;
    *) options+=("$1")
       echo "${options[@]}";;
  esac
  shift
done

除了不能正常工作之外,我觉得还有更好的方法来做到这一点。
谁能指出我正确的方向,或者至少告诉我我做错了什么?

【问题讨论】:

  • 你想解析用户输入还是命令行选项?
  • 对不起!命令行选项。
  • Bash FAQ 035 中列出了许多选项。
  • 尝试在这里搜索[bash] getopts,或者如果你知道getopts,你可能想解释一下你为什么不想使用它。祝你好运!
  • 从您的问题中不确定您是否只想解析或排序。无论如何,如果您只想解析除上面提到的getopts 之外的命令行选项,那么您还有一个docopts 选项,我觉得这很方便。您所要做的就是编写一条帮助消息并将其提供给 docopts,它将解析命令行选项。如果这个答案让我知道,我将添加示例作为答案。 check

标签: linux bash shell unix


【解决方案1】:

使用 shell 内置 getopts 或 GNU 命令 getopt

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2010-09-17
    • 2015-12-03
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多