PowerShell简单数组索引取值输出结果与预期不符问题
问题诱因
PowerShell双引号内的字符串插值有默认解析规则:只会把$开头的连续合法变量名识别为插值对象,变量名后跟随的索引器、属性访问、方法调用等内容不会被纳入插值表达式范围。
你写的"$nameonly[4]"会被解析为两部分:
- 对
$nameonly变量做字符串插值:数组转字符串时默认用空格拼接所有元素,你的数组索引0为空、索引1-9为A1到A9、索引10-19为初始化的空字符串,拼接后得到A1 A2 A3 A4 A5 A6 A7 A8 A9 - 字面量内容
[4]会被直接当作普通字符串拼接在前述结果末尾,最终就输出了你看到的异常结果,根本没有触发索引4的元素读取逻辑。
修复方案
有两种常用改法,都能得到预期的A4输出:
- 方法1:用
$()子表达式运算符包裹完整的取值表达式,明确告诉PowerShell要执行整段逻辑后再插值,修改输出语句为:Write-Host "$($nameonly[4])" - 方法2:不需要额外做字符串插值,直接把数组元素作为参数传给
Write-Host即可:Write-Host $nameonly[4]
附修改后可正常运行的完整代码:
$nameonly = @("") * 20 $i=1 do { $nameonly[$i] = "A$i" $i++ } until ($i -eq 10) Write-Host $nameonly[4]
注:你的现有逻辑里数组索引0始终为空值,是因为循环从
$i=1开始计数,如果需要索引0也赋值,调整循环初始值即可,不影响本次索引4的取值结果。
内容的提问来源于stack exchange,提问作者BrandyPuff
相关产品推荐
相关产品推荐

