2011-07-22 20 views
4

我正在完成一個需要像「one:two:three」這樣的參數的命令。Bash完成時沒有任何空格分隔的詞

用最簡單的術語來說,我想'''被處理就像空格字符是默認的。有沒有簡單的方法來做到這一點,我失蹤了?

我發現':'在COMP_WORDBREAKS中,但COMP_WORDBREAKS中的字符也被當作單詞處理。

因此,如果命令行是:

cmd one:tw[TAB] 

COMP_CWORD將在3和COMP_WORDS [COMP_CWORD-1]將是 ':'

爲了進行比較,如果該命令行是:

cmd one tw[TAB] 

COMP_CWORD將是2並且COMP_WORDS [COMP_CWORD-1]將是'one'

更糟糕的是,如果你打[TAB]後右 ':' 分隔符它的行爲大多喜歡一個空間:

cmd one:[TAB] 

現在COMP_CWORD將是2和COMP_WORDS [COMP_CWORD-1]將是 '一'。

我可以很容易地從COMP_LINE自己解析命令行,但更好地找到一種方法在我的自定義完成中使':'像''一樣行事。可能?

回答

0

首先採用自定義分析解決方案。愛知道是否有更好的方法:

parms=$(echo "$COMP_LINE" | cut -d ' ' -f 2) 
vals="${parms}XYZZY" 
IFS=$":" 
words=($vals) 
unset IFS 
count=${#words[@]} 
cur="${words[$count-1]%%XYZZY}" 
相關問題