更新:

更新:

我有一个 script foo,它采用以下形式的一些可选命令行参数:

foo -A <NUM> -B <NUM> -i

或者也可以没有空格:

foo -A<NUM> -B<NUM> -i

其中 NUM 是整数。该脚本不应完成文件名/目录。

我有以下完成规则:

#compdef foo

 local -a args

_arguments -S \
    '*-A' \
    '*-B' \
    '*-i'

我必须添加什么,以便完成知道选项-A-B本身不完整,但需要一个数字才能继续完成?

在另一个脚本中,我有类似的情况,唯一的区别是选项使用=

foo --port=<PORT>

我怎么也能做到这一点?

更新:

我遇到奇怪的问题,完成如下:

#compdef foo

_arguments -S \
    '-A+:' \
    '-B+:' \
    '-i'

由于某种原因,第一个参数A被忽略,即:

foo -<TAB>
-B -i

但是当我把其他选项放在前面时A

#compdef foo

_arguments -S \
    '-x+:' \
    '-A+:' \
    '-B+:' \
    '-i'

那么不仅会A显示,还会显示另一个新选项:

foo -<TAB>
-A  -B  -i  -x

这里发生了什么?

答案1

告诉_arguments该选项需要一个参数。选项后面+的表示该选项可以在同一个单词中,也可以在单独的单词中。第一部分之后的部分:是生成匹配时显示的消息,这在这里毫无意义,因为不会有任何完成。第二列之后的部分是补全函数,大概没有。

_arguments -S : \
    '*-A+:number:' \
    '*-B+:number:' \
    '*-i'

对于长选项,如果 和 都被接受,或者如果仅被接受,则放在选项名称之后而=不是:放在选项名称之后。对于网络 (TCP/UDP) 端口,如果您的命令接受端口名称,请用作完成函数。--port 123--port=123=---port=123_port

相关内容