我正在查看 Ansible 文档这里并查看将输出注册为变量的示例显示以下内容:
- name: test play
hosts: all
tasks:
- shell: cat /etc/motd
register: motd_contents
- shell: echo "motd contains the word hi"
when: motd_contents.stdout.find('hi') != -1
条件语句中的相等性检查when
是针对 -1 的,但我会假设这是一个布尔值,因此返回 0 或 1。我无法在文档中找到任何内容来指出为什么否定情况是 -1 而不是 0。这让我很担心,因为它是非标准行为,我想知道在这种比较中我可以期待哪些其他类型的返回值,无论如何,什么是成功?0?1?
答案1
这是因为 Python方法在找不到请求的子字符串时string.find
会返回。-1
否则,它返回找到该字符串的索引。
您可以参考Python 文档:
string.find(s, sub[, start[, end]])
返回 s 中子字符串 sub 所在的最低索引,且 sub 完全包含在 s[start:end] 中。失败时返回 -1。