3

cat是否可以使用to _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 测试测试] 2test
[2 测试测试]

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

1test[1testtest] 2test
[2testtest]

有用。

有任何想法吗?

解决方案:

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

参考:Bash cat 命令空间问题解释

4

1 回答 1

1

您可以使用该mapfile模块:

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

mapfile关联数组提供对外部文件内容的访问。参数扩展标志(f)将结果扩展拆分为换行符,以便文件的每一行将形成一个单独的参数_values

于 2014-01-25T23:52:49.767 回答