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) }
但我不知道为什么它是正确的。