2011-12-21 11 views
5

estoy tratando de averiguar por qué el siguiente ocurre si tieneReferencing Powershell índice de matriz produce resultados inesperados cuando se hace referencia con la secuencia

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

    write-host ".\"$arr[$i] 
    write-host ".\$arr[$i]" 
    write-host $arr[$i] 
} 

Así que teniendo sólo un bucle a través de ella produce:

".\ Filename1" 
".\ Filename1 Filename2[0]" 
"Filename1" 

Solo haciendo referencia a la matriz [índice] producirá el valor correcto, pero si concateno con una cadena, se coloca un espacio entre la cadena y el valor. Cuando se coloca dentro de la cadena que supongo que está vertiendo todo el contenido, ya que está evaluando $ array después evaluando $ i terminando con

"\ nombrearchivo1 nombrearchivo2 [número de índice]"

Pero si le asigno el individuo valor a una variable separada y concatenarlo con una cadena no hay espacio? ¿Por qué es que:

Ejemplo:

$name = $arr[$i] 
write-host ".\$name" 

salida =

que es correcto" \ nombrearchivo1" ..

Respuesta

10

que tiene que hacer:

write-host ".\$($arr[$i])" 

de manera que se evalúa como la indexación de matrices.

Sería el caso con algo así como acceder a las propiedades de un objeto o una clave de hachís, etc. dentro de la cadena:

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

Otra alternativa es utilizar el formato de cadenas, especialmente útil cuando se tiene una gran cantidad de variables/objetos de la cadena:

write-host (".\{0}" -f $arr[$i]) 
3

el código debería tener este aspecto:

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

    write-host ".\"$arr[$i] 
    #write-host ".\$arr[$i]" 
    write-host ".\$($arr[$i])" 
    write-host $arr[$i] 
} 
Cuestiones relacionadas