You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible技术问题:如何在循环中对数值求和并赋值给变量?

在Ansible中实现循环数值求和并赋值给变量的正确方法

你的代码之所以无法正常运行,主要有两个问题:

  1. sum(item | int) 的用法错误:sum 函数需要接收一个可迭代的列表/集合,而不是单个数值,直接传入单个整数的话,sum 只会返回这个整数本身;
  2. 用 loop 配合 set_fact 会反复覆盖变量:每次循环都会重新赋值 total,最后得到的只是最后一个循环项的值(也就是3),而非总和。

下面给你几种正确的实现方式,根据你的实际场景选择:

方式一:直接对列表求和(最简洁)

如果你的数值已经是一个列表,不需要单独循环处理每个元素,可以直接用 sum 过滤器:

- name: 直接计算列表数值总和
  set_fact:
    total: "{{ [1, 4, 3] | sum }}"

- name: 输出求和结果
  debug:
    var: total

方式二:先收集处理后的元素再求和

如果需要先对每个元素做转换(比如字符串转整数)或其他处理,再求和,可以先把处理后的元素收集到一个列表,再计算总和:

- name: 收集处理后的数值到列表
  set_fact:
    processed_items: "{{ processed_items | default([]) + [item | int] }}"
  loop:
    - 1
    - 4
    - 3

- name: 计算列表总和
  set_fact:
    total: "{{ processed_items | sum }}"

- name: 输出求和结果
  debug:
    var: total

方式三:用 map 过滤后直接求和

如果只是需要对列表中的每个元素做统一转换(比如转整数),可以用 map 过滤器配合 sum,一步到位:

- name: 转换并求和
  set_fact:
    total: "{{ my_numbers | map('int') | sum }}"
  vars:
    my_numbers:
      - 1
      - 4
      - 3

- name: 输出求和结果
  debug:
    var: total

这几种方式都能正确得到总和8,你可以根据自己的实际需求选择合适的写法~

内容的提问来源于stack exchange,提问作者Willian Cardoso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:57:23