powershell - Powershell 5.1 三元数组赋值
问题描述
我对 Powershell 5.1 中的三元运算符有疑问。如果我尝试分配数组@(...),它不会像我预期的那样工作:
# I can assign an array to a variable:
$a=@("TRUE")
write-host "a:" $a
# I can do that in a proper if/then statement, too:
$b = @(if ($false) {@("True")} else {@("False")})
write-host "b:" $b
# Assignment of string constants works fine with ternary syntax:
$c = @( {"True"} , {"False"} )[!$true]
write-host "c:" $c
# but not with array assignments:
$d = @( {@("True")} , {@("False")} )[!$false]
write-host "d:" $d
# Expected: "False".
# Actual output: @("False")
输出:
a: TRUE
b: False
c: "True"
d: @("False")
关于三元运算符的线程并没有为我澄清这一点。(PowerShell中的三元运算符)
更新: $d 需要是一个数组,以及两个内部项目。为简单起见,这里只显示了一个字符串常量。
解决方案
笔记:
- PowerShell (Core) 7+现在有一个内置的n 三元运算符,因此您可以使用类似的东西
$var = $true ? "True" : "False"
不要{ ... }
在你的操作数周围使用:{ ... }
用于脚本块文字,它在字符串上下文中评估它们的逐字内容(没有分隔符)。
省略封闭{
并}
解决直接问题:
$d = @( @("True") , @("False") )[!$false]
write-host "d:" $d
但是,根据您的意图,@()
使用数组子表达式运算符似乎既多余又无效;以上等价于:
$d = ( "True", "False" )[!$false]
write-host "d:" $d
请注意,数组文字@(...)
从不需要;使用数组构造器操作符通常就足够了。有关更多信息,请参阅此答案的中间部分。,
如果你想$d
成为一个数组,你需要应用@(...)
到整个表达式:
# $d is now a 1-element array containing 'False'
$d = @(( "True", "False" )[!$false])
write-host "d:" $d
或者,类型约束 $d
为数组:
# $d is now a 1-element array containing 'False'
[array] $d = ( "True", "False" )[!$false]
write-host "d:" $d
推荐阅读
- reactjs - 将盖茨比图像作为道具传递
- java - 禁用 com.itextpdf.text.Paragraph 的链接
- excel - 如何区分 sumproduct 是否需要插入 CSE?
- c# - 为什么我可以更改不透明度但不能更改背景?
- android - 一种在颤动中将最小化的应用程序置于前台的方法
- flutter - Flutter:如何使对话框的按钮居中?
- xamarin - 由于违反权限政策,xamarin.android 应用被 Play 商店拒绝
- python - 如何使用 Wtforms 在字符串字段中呈现(使可点击)url
- r - 如何在 R 中使用 TF IDF 计算 2 个字符串列之间的相似度
- android - 如何在 react-native 应用程序中打开网站(Android 和 iOS)