我正在研究与盐相关的东西。我在那里看到了 salt 文件中的 onlyif 条件。我对文件中给出的声明感到困惑。
Also be aware that the **boolean value** is determined by the **shell's** concept of True and False, rather than **Python's** concept of True and False.
关联:https://docs.saltstack.com/en/latest/ref/states/executives.html
我的猜测是
`Shell Python`
True = 0 True = 1
False = 1 False = 0
如果我错了,请纠正我。
答案1
在大多数能够将整数视为布尔值的编程语言中,非零值(不仅仅是 1)是“真”,零值是“假”。
例如在 C 中:
int a = some_function();
if (a) {
puts("some_function returned a non-zero value");
}
...在 Python 中也类似(但显然语法不同)。
在 shell 中,这不太有用,因为公用事业公司希望发出成功或失败的信号来完成他们想做的任何事情,并且可能需要用更多的细节来区分失败,而不仅仅是“我失败了”。
这意味着有一个退出状态,零,这意味着“成功”,“一切顺利”,或“我做了我应该做的事情”,任何其他退出值都应被视为“失败”。一些实用程序使用多个非零退出状态来进一步让用户知道出了什么问题(例如,请参阅rsync
和手册中的“退出代码/值” curl
)。
此外,如果实用程序被信号终止,则实用程序的退出状态将为 128 加上信号编号(请参阅kill -l
您的系统)。
从“壳牌与公用事业”的介绍性文字在POSIX标准中(谈论手册的各个部分,欢迎更好的参考):
本
EXIT STATUS
节描述实用程序应返回给调用程序或 shell 的值,以及导致返回这些值的条件。通常,实用程序在成功完成时返回零,在各种错误情况下返回大于零的值。如果本节中列出了特定数值,系统应使用这些值来描述错误。在某些情况下,状态值的列出更为宽松,例如 >0。严格符合要求的应用程序不应依赖于所示范围内的任何特定值,并应准备好接收该范围内的任何值。例如,实用程序可能将 0 列为成功返回,将 1 列为因特定原因而失败,> 1 列为“发生错误”。在这种情况下,未指定的条件可能会导致返回 2 或 3 或其他值。应编写符合要求的应用程序,以便测试成功的退出状态值(在本例中为零),而不是依赖于 POSIX.1-2008 本卷中列出的单个特定错误值。这样,即使在具有扩展的实现上,它也具有最大的可移植性。
请注意,库函数有时会针对错误情况返回非零(因此为“真”)值。例如,标准 C 函数fgetc()
并在出错时fputc()
返回EOF
(通常为 -1),这是一个“真”值,因为它不为零。
因此,关于如何在编程语言和 shell 中将整数解释为布尔值以及如何报告错误条件(这是两个相关主题)的讨论之间存在细微的差异。