引用Powershell数组索引在使用string引用时会产生意外结果

pgh*_*ech 7 powershell

我试图找出如果你有以下情况发生的原因

$arr = @("Filename1", "Filename2")
for($i =0; $i -le $arr.Length -1; $i++) {

   write-host ".\"$arr[$i]
   write-host ".\$arr[$i]"
   write-host $arr[$i] 
}
Run Code Online (Sandbox Code Playgroud)

因此只需一个循环即可生成:

".\ Filename1"
".\ Filename1 Filename2[0]"
"Filename1"
Run Code Online (Sandbox Code Playgroud)

只是引用数组[index]将产生正确的值,但如果我与字符串连接,它会在字符串和值之间放置一个空格.当放在字符串中时,我假设它正在转储整个内容,因为它正在评估$ array,然后评估$ i结束

".\ filename1 filename2 [索引号]"

但是,如果我将单个值分配给一个单独的变量并将其与一个字符串连接起来就没有空格了?这是为什么:

例:

 $name = $arr[$i]
 write-host ".\$name"
Run Code Online (Sandbox Code Playgroud)

output =".\ filename1"

哪个是对的.

man*_*lds 15

你必须做:

write-host ".\$($arr[$i])"
Run Code Online (Sandbox Code Playgroud)

以便将其评估为数组索引.

在字符串中访问对象的属性或散列等的键就是这种情况:

PS > $a = @{test="A";test2="B"}
PS > write-host "$a.test"
System.Collections.Hashtable.test
PS > write-host "$($a.test)"
A
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用字符串格式,当字符串中有许多变量/对象时尤其有用:

write-host (".\{0}" -f $arr[$i])
Run Code Online (Sandbox Code Playgroud)