0

--with-PROG=我想为一个接受和--PROG-options作为可选参数的程序编写完成。PROG可能是不同的程序之一。有许多不同的程序,所以我想避免手动为每个程序写出一个选项。我确实尝试了以下方法:

#compdef hello

typeset -A opt_args
local context state line

_hello()
{
    typeset -a PROGS
    PROGS=('gcc' 'make')
    _arguments \
        '--with-'${^PROGS}'[path to PROG]:executable:_files' \
        '--'${^PROGS}'-options[PROG options]:string:'
}

输出:

$ hello --gcc-options
--make-options  --gcc-options  -- PROG  options                                                                                                                          
--with-make     --with-gcc     -- path to PROG

但是,我希望将每个单独的选项放在单独的行上,并替换PROG为程序名称。最好的方法是什么?

4

1 回答 1

0

您需要对 _arguments 使用数组持有参数:

_hello()
{
    emulate -L zsh
    local -a args_args
    local prog
    for prog in gcc make ; do
        args_args+=( 
            "--with-${prog}[path to $prog]:executable:_files"
            "--${prog}-options[$prog options]:string:"
        )
    done
    _arguments $args_args
}
于 2013-08-31T16:41:10.880 回答