gpt4 book ai didi

Powershell 跳过数组中的元素,如果它为空

转载 作者:行者123 更新时间:2023-12-02 22:55:58 26 4
gpt4 key购买 nike

我有一个 powershell 脚本,我从 Jenkins 那里接收元素名称作为变量:

$IISarray = @("$ENV:Cashier_NAME", "$ENV:Terminal_NAME", "$ENV:Content_Manager_NAME", "$ENV:Kiosk_BO_NAME")

foreach ($string in $IISarray){
"some code goes here"
}

有时随机元素可以为空。如何添加检查以查看数组中的当前元素是否为空,跳过它并转到下一个元素?

最佳答案

最容易使用 -ne ''创建排除空条目的数组的过滤副本 ,这得益于许多 PowerShell 运算符能够充当具有数组值 LHS 的过滤器。
注意:我假设您的意思是 过滤掉空字符串 , 也不是空白(全空白)的,因为未定义的环境变量扩展为空字符串。

# Sample array with empty elements.
# Note: No need for @(...), unless there's just *one* element.
$IISarray = "foo", "", "bar", "baz", ""

# Note the `-ne ''`, which filters out empty elements.
foreach ($string in $IISarray -ne ''){
$string # echo
}
以上产生:
foo
bar
baz

soundstripe's answer提供 Where-Object解决方案,它可能通过指定任意过滤器脚本块的能力提供额外的灵活性,但在此用例中使用管道有点笨拙。
幸运的是, PSv4+ 提供 .Where()收款方式 ,表现明显更好。
让我用 演示一下一个也排除空白(全空白)元素的解决方案 :
# Note the all-whitespace element, which we want to ignore too.
PS> ("foo", " ", "bar", "baz", "").Where({ $_.Trim() })
foo
bar
baz
类似于 Where-Object cmdlet,您将脚本块传递给 .Where()方法,其中自动 $_变量代表手头的输入元素。 .Trim()方法从字符串中修剪前导和尾随空格并返回结果。
因此,全空白字符串会导致空字符串。
在 bool 上下文中(如 .Where() 方法脚本块隐含的那样),空字符串的计算结果为 $false , 而任何非空字符串都是 $true .
但是,您可以选择显式( $_.Trim() -ne '' ),甚至使用 .NET 方法( [string]::IsNullOrWhiteSpace($_) )。

关于Powershell 跳过数组中的元素,如果它为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53286156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com