쉼표로 구분 된 매개 변수 목록에 대한 완료 규칙을 작성하고 싶습니다. 예를 들어 서버 이름 목록을 수신하는 명령이 있습니다.
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-lists에 대한 번들 함수가 있습니까?
$VARIABLE
그렇지 않으면 단어 분리가 발생하지 않습니다. 그냥 사용하십시오 IFS=, LIST=($VARIABLE)
.
IFS=, LIST=("$VARIABLE")
여기서 $ VARIABLE에는 쉼표로 구분 된 값이 포함됩니다.