我想为逗号分隔的参数列表创建完成规则。例如,我有接收服务器名称列表的命令:
myscript -s name1,name2,name3
现在,我已经完成以下工作:
_myscript () {
local cur prev opts
_get_comp_words_by_ref cur prev
opts='-s'
servers='name1 name2 name3'
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
else
case "${prev}" in
-s)
if [[ "$cur" == *,* ]]; then
local realcur prefix
realcur=${cur##*,}
prefix=${cur%,*}
COMPREPLY=( $(compgen -W "${servers}" -P "${prefix}," -- ${realcur}) )
else
COMPREPLY=( $(compgen -W "${servers}" -- ${cur}) )
fi
;;
*)
# do nothing
;;
esac
fi
}
但是它至少有两个问题:
- 对当前值的建议在其前缀中包括所有先前的值。
- 它不考虑重复值。
这种情况下的最佳做法是什么?也许bash-completions具有一些csv-list捆绑功能?
$VARIABLE
,否则不会发生断字的情况。只是使用IFS=, LIST=($VARIABLE)
。
IFS=, LIST=("$VARIABLE")
其中$ VARIABLE包含逗号分隔的值。