Что такое ``? `В Powershell?
В чем смысл $?
в Powershell?
Изменить: TechNet отвечает в тавтологии, не объясняя, что означает "преуспевать" или "терпеть неудачу".
$?
Содержит статус выполнения последней операции. Он содержит TRUE, если последняя операция выполнена успешно, и FALSE, если она не удалась.
Я предположил $? просто проверит, имеет ли $LastExitCode значение 0, но я нашел пример counter, где $? False, но $LastExitCode имеет значение True.
Ответы
Ответ 1
Он возвращает true
, если последняя команда была успешной, иначе false
.
Однако существует ряд предостережений и неочевидного поведения (например, что именно подразумевается под "успехом" ). Я настоятельно рекомендую читать эту статью для более полного лечения.
Например, рассмотрим вызов Get-ChildItem.
PS> Get-ChildItem
PS> $?
True
$? вернет true
, когда вызов Get-ChildItem будет выполнен успешно.
Однако, если вы вызываете Get-ChildItem в каталоге, который не существует, он вернет ошибку.
PS> Get-ChildItem \Some\Directory\Which\Does\Not\Exist
Get-ChildItem : Cannot find path 'C:\Some\Directory\Which\Does\Not\Exist' because it does not exist.
PS> $?
False
$? вернет false
здесь, поскольку предыдущая команда не была успешной.
Ответ 2
$?
будет содержать $false
, если последняя команда привела к ошибке. Он будет содержать $true
, если это не так. В PowerShell v1 дня это был обычный способ обработки ошибок. Например, в script, если вы хотите проверить наличие файла и затем распечатать специальное сообщение, если оно этого не произошло, вы можете сделать:
Get-Item -Path john -ErrorAction silentlycontinue;
if( -not $?)
{
'could not find file.';
exit
}`