我想为一个以--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
替换为程序名称。最好的方法是什么?
答案 0 :(得分: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
}