我想为一个必须像这样引用的论点提供建议:
$ cmdx 1starg 'argtwoa %1 %x argtwob'
交互应该是这样的(预期):
$ cmdx 1starg '[TAB TAB]
argtwoa argtwoc %1
$ cmdx 1starg 'argtwob[TAB TAB]
argtwoa argtwoc %1
$ cmdx 1starg 'argtwob
但是,如果我输入了第一个单词(提议中的一个)作为第二个参数,Bash 不会给出更多示例,而是关闭打开的引用:
$ cmdx 1starg 'argtwob'
到目前为止,我的完成功能如下所示:
function _complete() {
local cur prev args
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
# echo "## prev=|$prev| cur=|$cur| words=[$COMP_CWORDS[@]] word=|${COMP_CWORD}| ##"
if [ ${COMP_CWORD} -eq 1 ]; then
args="1starg"
COMPREPLY=( $(compgen -W "${args}" -- ${cur}) )
return 0
elif [ ${COMP_CWORD} -ge 1 ]; then
args="argtwoa argtwob argtwoc %1"
if [[ "${cur}" =~ ^\'[^[:space:]]+[[:space:]]$ ]]; then
args="%1"
fi
COMPREPLY=( $(compgen -W "${args}" -- ${cur}) )
# echo "####|${COMREPLY}|#|${args}|####"
return 0
fi
}
complete -F _complete cmdx
当我取消注释第二个调试echo
- 并在第二个参数打开后用单引号和第一个单词和一个空格然后按 Tab 键时,TAB
我希望将“%”作为建议打印。调试输出确认,我的代码在compgen
运行之前是正确的:
$ cmdx 1starg 'argtwoa ####||#|%1|####
我怀疑,不可能做我想做的事,因为结果args
值是正确的,但不是COMPREPLY
值(使用 调试echo
)。
doubleqoutes 也应该如此(我知道,我必须扩展代码)。