如何使用`cat`传递文件的内容到`_values`(zsh完成)

时间:2014-01-25 21:17:29

标签: bash zsh zsh-completion

是否可以使用cat将文件内容传递给_values(zsh完成)?

如果我取消注释下面的行_values cat .test_tasks~并在下面评论_values,那么它就无效了,我得到:_values:compvalues:10: invalid value definition: 1test[1

#compdef test
#autoload

local curcontext="$curcontext" state line ret=1
local -a _configs

_arguments -C \
  '1: :->cmds' \
  '2:: :->args' && ret=0

_test_tasks() {
  # _values "test" $(cat .test_tasks~)

  _values "test" \
      "1test[1 test test]" \
      "2test[2 test test]"
}

case $state in
  cmds)
        _test_tasks
    ret=0
    ;;
  args)
        _test_tasks
    ret=0
    ;;
esac

return ret

.test_tasks〜

  

1test [1 test test]
  2测试[2测试]

这似乎是空白的问题。如果我删除空格:

  

1test [1testtest]
  2检验[2testtest]

它有效。

有什么想法吗?

解决方案:

OLD_IFS=$IFS
IFS=$'\n'
_values $(< .cap_tasks~)
IFS=$OLD_IFS

参考:Bash cat command space issue explained

1 个答案:

答案 0 :(得分:1)

您可以使用mapfile模块:

zmodload zsh/mapfile
_values ${(f)mapfile[.test_tasks~]}

mapfile关联数组提供对外部文件内容的访问。参数扩展标志(f)在新行上拆分生成的扩展,以便文件的每一行都形成_values的单独参数。