1

重複の可能性:
bash 補完でのスペースと引用符の適切な処理

bash の補完に複数単語の引用符付き文字列を使用したいと考えています。

たとえば、私はこれができるのが好きです

$ command <tab> 
  "Long String 1"
  "Long String 2"

ここで、「Long String 1」と「Long String 2」は、タブが押されたときに表示される候補です。

~/strings 引用符で囲まれた文字列のリストが含まれているこれを使用してみました

function _hista_comp(){
    local curw
    COMPREPLY=()
    curw=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=($(compgen -W '`cat ~/strings`' -- $curw))    
    return 0
}
complete -F _hista_comp hista

上記の関数は、文字列を空白で分割します。引用符で囲まれた文字列全体を返すようにする方法はありますか?

たとえば~/string、次の行があった場合

  "Long String 1"
  "Long String 2"  

2 つではなく 5 つの提案が表示されます。

4

1 に答える 1

2

さまざまなことを試した後、追加することがわかりました

    IFS=$'\x0a';

関数の先頭に(入力セパレータを新しい行に変更します)、関数がスペースを正しく処理できるようにします。

したがって、関数は次のようになります

function _hista_comp(){  
    IFS=$'\x0a';
    local curw
    COMPREPLY=()
    curw=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=($(compgen -W '`cat ~/strings`' -- $curw))    
        uset IFS
    return 0
}
complete -F _hista_comp hista

これにより、

$ command <tab> 
  "Long String 1"
  "Long String 2"

私が欲しかったように。

于 2012-05-04T02:17:50.697 に答える