完成已知列表中的第二个参数

Completing second argument from known list

我正在编写 bash 脚本。它接收两个参数。第一个只是用户可以根据需要指定的字符串。然而,第二个参数必须是已知集合的成员,例如applebananapinenutpineapple。我知道如何检查参数是否合法,但我觉得必须输入完整的单词很烦人。我可以将参数缩短为 abpnpa,但这很难记住,而且有点难看。有没有办法提供自动完成,以便用户可以按 "a+tab",它会自动完成到 apple

function autocomp_fruit_script {
  local cur opts
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  fruit="apple banana pinenut pineapple"
  if [ $COMP_CWORD -eq 2 ]; then
    COMPREPLY=( $(compgen -W "${fruit}" -- ${cur}) )
    return 0
  fi
}
complete -o nospace -F autocomp_fruit_script fruit_script

其中 fruit_script 是我的脚本。