我正在尝试编写一个Bash完成函数来完成像--param1=value1
这样的长命令行选项。如果未引用value1
,这样可以正常工作。但在许多情况下,value1
需要引用,例如--param1='Hello world'
。在这种情况下,Bash完成停止工作。例如:
_myprog()
{
local cur="${COMP_WORDS[$COMP_CWORD]}"
local words=(--param1 --param2)
COMPREPLY=( $(compgen -W "${words[*]}" -- "$cur") )
}
complete -F _myprog myprog
如果我提供此source script.sh
,然后输入myprog --param1='hello' <tab><tab>
则不会发生任何事情。如果我在双短划线之前开始引用,例如myprog '--param1=hello' <tab><tab>
..
有什么建议吗?
答案 0 :(得分:0)
可以使用COMP_LINE
代替COMP_WORDS
:
_myprog()
{
local comp_line=( $COMP_LINE )
local cur
if [[ ${COMP_LINE: -1} == ' ' ]] ; then
cur=""
else
cur="${comp_line[@]: -1}"
fi
local words=(--param1 --param2)
COMPREPLY=( $(compgen -W "${words[*]}" -- "$cur") )
}