在PowerShell中,$?
和$LastExitCode
有什么区别?
我读了about automatic variables,它说:
在$?
的定义中,它没有解释成功和失败的含义。
我问是因为我假定且仅当$ LastExitCode为0时$?
为True,但是我发现了一个令人惊讶的反例:$LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError。
最佳答案
$LastExitCode
是 native 应用程序的返回码。 $?
仅根据最后一个命令(cmdlet或 native )是否正确退出而返回True
或False
。
对于cmdlet,失败通常意味着一个异常,对于 native 应用程序,它是一个非零的退出代码:
PS> cmd /c "exit 5"
PS> $?
False
PS> cmd /c "exit 0"
PS> $?
True
使用Ctrl + C取消cmdlet也会被视为失败;对于 native 应用程序,这取决于它们设置的退出代码。