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