Powershell中$?
的含义是什么?
编辑:TechNet answers是同义反复,没有解释"成功"或"失败"的意思。
$?
包含最后一个操作的执行状态。如果最后一个操作成功,则包含TRUE;如果失败,则包含FALSE。
我以为$?会简单地测试$LastExitCode是否为0,但我发现了一个counter example,其中$?为False,而$LastExitCode为True。
Powershell中$?
的含义是什么?
编辑:TechNet answers是同义反复,没有解释"成功"或"失败"的意思。
$?
包含最后一个操作的执行状态。如果最后一个操作成功,则包含TRUE;如果失败,则包含FALSE。
我以为$?会简单地测试$LastExitCode是否为0,但我发现了一个counter example,其中$?为False,而$LastExitCode为True。
5条答案
按热度按时间d7v8vwbk1#
如果最后一个命令成功,则返回
true
,否则返回false
。然而,有一些警告和不明显的行为(例如,“成功”的确切含义是什么),我强烈建议阅读this article以获得更全面的治疗。
例如,考虑调用Get-ChildItem。
当调用Get-ChildItem成功时,$?将返回
True
。但是,如果对不存在的目录调用Get-ChildItem,则将返回错误。
$?将在此处返回
False
,因为之前的命令不成功。6tdlim6h2#
如果最后一个命令导致错误,则
$?
将包含$false
。如果未导致错误,则$?
将包含$true
。在PowerShell v1时代,这是执行错误处理的常用方法。例如,在脚本中,如果要检查文件是否存在,然后在文件不存在时打印自定义消息,则可以执行以下操作:0s0u357o3#
您还可以使用
$LastExitCode
参数访问最后命令退出代码。oug3syen4#
我在Windows Server 2019中遇到过,当生成标准错误时,$?可以设置为false。在我的示例中,Docker-compose通过标准错误记录警告,因此尽管以0退出,$?指示失败。
ni65a41a5#
**重要提示!!!**请注意Jules Clements的回答。即使$LastExitCode返回0,$?也可能返回false。
即使请求$?也会导致其内容发生更改。
**示例:**某些命令导致$?为false。第一次写入$?=〉将返回“false”第二次写入$?=〉将返回“true”