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"  

它将给出 5 个建议而不是 2 个。

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 回答