在 Powershell 中使用 ||、&& 进行中断

在 Powershell 中使用 ||、&& 进行中断

Powershell 现在支持||&&。但是当我尝试这样做时:

while ($true) { my_command.exe || break }

我收到一个错误

break: The term 'break' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again

那么,有什么简单、简短、方便的方法可以实现与 Bash 相同的效果吗:

while :; do my_command || break; done

答案1

while ($true) { my_command.exe || 中断 }

运算符||&&主要不是 PowerShell 运算符,而是批处理命令,与 DOS/CMD 的关系比与 PowerShell 的关系更密切。这些运算符检查可执行文件返回的错误代码是成功(0)还是失败(非 0)。

该命令break不是DOS/CMD命令,而是纯PowerShell命令,主要涉及循环或开关命令的控制流。

我认为这就是为什么您尝试将来自两个不同世界 DOS/CMD 和 PowerShell 的语法结构结合起来但在第一个表述中失败的原因。

while ($true) { my_command.exe || $(break) }

在您答案的第二个表述中,您使用了$()运算符。此运算符评估并执行 PowerShell 表达式。break然后由 PowerShell 而不是 DOS/CMD 评估该命令,现在 DOS/CMD 能够正确执行该命令并终止 while 循环。

答案2

我想我找到了答案:

while ($true) { my_command.exe || $(break) }

但我不知道为什么它是正确的。

相关内容