次のbash補完は、可能な単語(つまり補完)の配列をcompgenに渡します。Bash Autocompletion - この配列を重大な空白を崩壊させずにcompgenに渡すには?
basenames=("foo" "fu bar" "baz");
COMPREPLY=($(compgen -W "${basenames[*]}" -- "${COMP_WORDS[COMP_CWORD]}"))
問題が配列要素に空白が保持されないことである、すなわち、「FOOバー」である要素に関して単語分割のおかげで処理されます。 3つの要素が表示され、4ではなく、空白を保持する方法がありますか?
EDIT
basenames
はそれが(離れてから/と\ 0)ほぼすべての文字が許可されている、ファイル名が含まれています。
EDIT 2
は-Wフラグがfoo bar foobar
のようなものである単一の単語を、期待しています。複数の要素を渡す(これが${basenames[@]}
の場合)。
EDIT 3
変更examplaryベース名アレイ(SO foo bar
からfoo
とfoo
が崩壊されません)。
単語を区切るために改行を使用して動作します。\0
を使用して
local IFS=$'\n'
COMPREPLY=($(compgen -W "$(printf "%s\n" "${basenames[@]}")" -- ${COMP_WORDS[COMP_CWORD]}"))
はしていません:
local IFS=$'\0'
COMPREPLY=($(compgen -W "$(printf "%s\0" "${basenames[@]}")" -- ${COMP_WORDS[COMP_CWORD]}"))
+1これは私が実際に望んだものを達成した方法です。本当に良いアドバイス! – helpermethod
"$ 2"と "## * /"は何ですか? – oluc
## /最後の '/'まで頭を削除します。 $ 2が現在の補完単語です。 ? – oluc