Skip to content

任意变量

Pete Davison
Pete Davison
Maintainer

Task 一直支持变量,但即使您可以使用不同的 YAML 类型定义它们,它们也会被 Task 转换为字符串。这限制了用户只能进行字符串操作,并鼓励了对简单问题的混乱变通。从 v3.37.0 开始,这不再是问题!Task 现在支持大多数变量类型,包括 布尔值整数浮点数数组

这有什么重要性?

这些变化让您能够以更自然的方式使用变量,并开启了许多之前无用的 sprig 函数。查看下面的示例以获取一些灵感。

评估布尔值

不再需要将字符串与 "true" 或 "false" 进行比较。现在您可以在模板中使用实际的布尔值:

yaml
version: 3

tasks:
  foo:
    vars:
      BOOL: true # <-- Parsed as a string even though its a YAML boolean
    cmds:
      - '{{if eq .BOOL "true"}}echo foo{{end}}'
yaml
version: 3

tasks:
  foo:
    vars:
      BOOL: true # <-- Parsed as a boolean
    cmds:
      - '{{if .BOOL}}echo foo{{end}}' # <-- No need to compare to "true"

算术运算

您现在可以在整数和浮点数变量上执行基本的算术运算:

yaml
version: 3

tasks:
  foo:
    vars:
      INT: 10
      FLOAT: 3.14159
    cmds:
      - 'echo {{add .INT .FLOAT}}'

您可以使用以下任何算术函数:addsubmuldivmodmaxminfloorceilroundrandInt。请查看 slim-sprig 数学文档 以获取更多信息。

数组

您现在可以在模板中遍历数组,并使用基于列表的函数:

yaml
version: 3

tasks:
  foo:
    vars:
      ARRAY: [1, 2, 3]
    cmds:
      - 'echo {{range .ARRAY}}{{.}}{{end}}'

您可以使用以下任何基于列表的函数:firstrestlastinitialappendprependconcatreverseuniqwithouthascompactslicechunk。请查看 slim-sprig 列表文档 以获取更多信息。

使用 for 遍历变量

以前,您必须使用分隔符分隔的字符串来遍历变量中的任意项目列表,并使用 split 子键指定分隔符来拆分它们。然而,我们现在添加了对使用 for 关键字遍历“集合类型”变量的支持,因此您现在可以直接遍历列表变量:

yaml
version: 3

tasks:
  foo:
    vars:
      LIST: 'foo,bar,baz'
    cmds:
      - for:
          var: LIST
          split: ','
        cmd: echo {{.ITEM}}
yaml
version: 3

tasks:
  foo:
    vars:
      LIST: ['foo', 'bar', 'baz']
    cmds:
      - for:
          var: LIST
        cmd: echo {{.ITEM}}

地图呢?

地图最初包含在 Any Variables 实验中。然而,它们还没有完全准备好。与其让您等待所有内容同时准备好,我们已经发布了所有其他变量类型支持,并将在新的 "[Map Variables][map-variables]" 实验中继续开发地图支持。

我们正在寻求对几种不同提案的反馈,因此请尝试一下并告诉我们您的想法。🙏