可能重复:
Properly handling spaces and quotes in bash completion
我想使用多字引用的字符串来完成bash。
e.g。我希望能够做到这一点
$ command <tab>
"Long String 1"
"Long String 2"
其中“Long String 1”和“Long String 2”是按Tab键时给出的建议。
我尝试使用此~/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"
它会提供5条建议,而不是2条。
答案 0 :(得分:1)
在尝试了各种各样的事情后,我发现添加了
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"
正如我所愿。