在powershell中,我的代码看起来像这样。如果用户不提供任何变量,那么目的是用数据填充少量变量:
if ($1 -eq $null){$1 = "N/A"}
if ($2 -eq $null){$2 = "N/A"}
if ($3 -eq $null){$3 = "N/A"}
是否有可能将这些内容压缩成这样的东西?
if ($1 -or $2 -or $3 -eq $null){
$FILLER = "N/A"
}
其中$ FILLER是返回True的变量?
编辑:例如,如果$ 2为null但是$ 1和$ 3不是 - 那么代码将N / A分配给$ 2。
注意:我对单个if语句没有问题,我只是想压缩重复的代码。
答案 0 :(得分:2)
您可以使用Get-Variable
cmdlet。该cmdlet向您返回表示变量的PSVariable
个对象。 PSVariable
个对象具有Value
属性,允许您获取和设置变量的值。这样,您可以过滤具有特定值($null
)的变量,然后为它们分配新值。
Get-Variable 1, 2, 3 |
Where-Object { $null -eq $_.Value } |
ForEach-Object { $_.Value = 'N/A' }
答案 1 :(得分:1)
您可以使用!
来定义-eq $ null或-eq $ false:
if (!$1 -or !$2 -or !$3){
$FILLER = "N/A"
}
答案 2 :(得分:1)
你可以稍微改变一下顺序:
$1 = if (!$1) { "N/A" }
但是你真正要问的是,如何确定$true
语句中返回if
中的多个条件中的哪一个是不可能的。
如果要传递一组值并返回满足条件的值,请考虑Where-Object
:
$result = $1,$2,$3 | Where-Object { -not $_ }
如果条件是-match
或-like
之类的字符串运算符,它实际上已经在数组上运行并返回一个数组:
$result = 'apple','apply','ape','zebra' -like 'app*'