【问题标题】:Complete arguments for options选项的完整参数
【发布时间】:2021-11-22 07:56:53
【问题描述】:

我为: 命令编写了以下示例补全(以了解补全失败的原因):

__sample_complete()
{
  local OPTIONS=('--first' '--first=')
  local FIRST_ARGUMENTS=('arg1' 'arg2')

  local current=$2
  local previous=$3

  case $current in
    --first=*)
      current=${current##--first*,}
      readarray -t COMPREPLY < <(compgen -o nospace -W "${FIRST_ARGUMENTS[*]}" -- "$current")
      ;;
    *)
      readarray -t COMPREPLY < <(compgen -W "${OPTIONS[*]}" -- "$current")
      ;;
  esac
}

complete -F __sample_complete :

我想在输入: --first= 时看到arg1 arg2 的建议,但现在Bash 会自动在标签按下时使用--first 完成它:--first=--first

【问题讨论】:

标签: bash


【解决方案1】:

单词 --first= 在 COMP_WORDBREAKS 上被拆分,因此 --first 被视为另一个单词。调试非常简单 - 将 args=("$@"); declare -p args 添加到脚本并检查参数 - 当前单词为空,前一个单词为 --first

case "$3" in
--first) compgen -o nospace -W "${FIRST_ARGUMENTS[*]}" -- "$2"

我总是使用 COMP* 变量,不知道哪个更好。我喜欢https://devmanual.gentoo.org/tasks-reference/completion/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多