如果您有以下情况,我正在尝试找出为什么会发生以下情况
$arr = @("Filename1", "Filename2")
for($i =0; $i -le $arr.Length -1; $i++) {
write-host ".\"$arr[$i]
write-host ".\$arr[$i]"
write-host $arr[$i]
}
所以只需要一个循环就可以产生:
".\ Filename1"
".\ Filename1 Filename2[0]"
"Filename1"
仅引用 array[index] 将产生正确的值,但如果我与字符串连接,它会在字符串和值之间放置一个空格。当放置在字符串中时,我认为它正在转储整个内容,因为它正在评估 $array 然后评估 $i 结束
“.\文件名1 文件名2[索引号]”
但是,如果我将单个值分配给一个单独的变量并将其与一个字符串连接起来,就没有空格了吗?这是为什么:
例子:
$name = $arr[$i]
write-host ".\$name"
输出 = ".\filename1"
哪个是正确的。
最佳答案
你必须要做:
write-host ".\$($arr[$i])"
以便将其评估为数组索引。
在字符串中访问对象的属性或哈希键等就是这种情况:
PS > $a = @{test="A";test2="B"}
PS > write-host "$a.test"
System.Collections.Hashtable.test
PS > write-host "$($a.test)"
A
另一种选择是使用字符串格式,当字符串中有很多变量/对象时特别有用:
write-host (".\{0}" -f $arr[$i])
关于powershell - 使用字符串引用时,引用 Powershell 数组索引会产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592677/