2013-08-31 45 views
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。什麼是最好的方式來做到這一點?

回答

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 
}