如何使用``cat''_values'(ZSH完成)传递文件内容



是否可以使用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〜

1 -Test [1个测试]
2 -Test [2测试]

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

1 -test [1 -teststest]
2test [2teststest]

它有效。

有什么想法?

解决方案:

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

参考:bash cat命令空间问题解释了。

您可以使用mapfile模块:

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

mapfile关联阵列提供了对外部文件内容的访问。参数扩展标志(f)将结果扩展在Newlines上分配,以便文件的每一行将形成一个单独的参数,向_values

相关内容

  • 没有找到相关文章

最新更新