我希望能够通过一个 int 变量传递给 PowerShell 脚本,并能够判断变量是否为空。我的理解是,以下代码应该能够判断参数是否为 null:
if (!$args[0]) { Write-Host "Null" }
else { Write-Host "Not null" }
当我尝试将0作为整数传递时,这很好用。如果我使用0作为参数,PowerShell将其视为null。有什么正确的方法可以区分参数为空还是具有零值?
我希望能够通过一个 int 变量传递给 PowerShell 脚本,并能够判断变量是否为空。我的理解是,以下代码应该能够判断参数是否为 null:
if (!$args[0]) { Write-Host "Null" }
else { Write-Host "Not null" }
当我尝试将0作为整数传递时,这很好用。如果我使用0作为参数,PowerShell将其视为null。有什么正确的方法可以区分参数为空还是具有零值?
您可以直接测试$args
变量或$args.count
以查看传递到脚本的变量数量。
另外,$args[0] -eq $null
与$args[0] -eq 0
和!$args[0]
是不同的。
如果像我这样的用户来自 Google 并想知道如何处理空的命令行参数,这里有一个可能的解决方案:
if (!$args) { Write-Host "Null" }
这段代码检查了$args数组。如果您想要检查数组的第一个元素(即第一个cmdline参数),请使用OP提供的解决方案:
if (!$args[0]) { Write-Host "Null" }
param()
中声明为整数,则其值将为'0',即使没有为参数指定值也是如此。要防止这种情况发生,您必须将其声明为可空: param()
中声明为整数,则其值将为'0',即使没有为参数指定值也是如此。要防止这种情况发生,您必须将其声明为可空:param([AllowNull()][System.Nullable[int]]$Variable)
If ($Variable -eq $null) {}
进行验证。最初的回答。
$args[0] -eq $null
和!$args[0]
之间有区别,非常感谢! - Ryan Gillies-1
评估为True
(尝试[bool]-1
)。此外,请注意,除了$null
和0
之外,空字符串也会评估为False
([bool]""
)。 - Rynant