我需要一个包含所有空白元素的变量_名称列表。我尝试过这个:
blanks: "{{ _names|select('search', '') | list }}"
但它似乎不起作用
以下是列表:
"_names":
[
"",
"ABC",
"",
""
]
为了提供一些背景信息,我需要这个变量来计算空白元素并进行比较。
答案1
简单直观的方法是将select
元素设置为等于空字符串。另一种有点违反直觉但更简洁的方法是简单地将reject
元素设置为等于空字符串(默认情况下将拒绝所有非空值)。以下剧本演示了两种解决方案,它们的结果相同。
注意:reject
此处的方法仅在列表中其他非空元素的计算结果不为 false 时才有效。如果您曾经将布尔值设为 false,它们也会被保留
- hosts: localhost
gather_facts: false
vars:
_names: ["","ABC","",""]
blanks_select: "{{ _names | select('==', '') | list }}"
blanks_reject: "{{ _names | reject | list }}"
tasks:
- debug:
var: "{{ item }}"
loop:
- blanks_select
- blanks_reject
这使:
PLAY [localhost] *********************************************************************
TASK [debug] *********************************************************************
ok: [localhost] => (item=blanks_select) => {
"ansible_loop_var": "item",
"blanks_select": [
"",
"",
""
],
"item": "blanks_select"
}
ok: [localhost] => (item=blanks_reject) => {
"ansible_loop_var": "item",
"blanks_reject": [
"",
"",
""
],
"item": "blanks_reject"
}
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0