2011-12-21 7 views
5

próbuję dowiedzieć się, dlaczego następujący występuje, jeśli maszOdwoływanie PowerShell indeks tablicy produkuje nieoczekiwane wyniki, gdy odwołuje się łańcuch

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

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

Więc biorąc tylko jedną pętlę poprzez produkuje:

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

Po prostu odwołanie do tablicy [index] spowoduje wygenerowanie poprawnej wartości, ale jeśli połączę ją z ciągiem, umieszcza spację między ciągiem a wartością. Po umieszczeniu wewnątrz łańcucha Zakładam, że jest dumping całą zawartość, ponieważ ocenia $ array następnie oceniający $ i kończąc

„\ nazwa_pliku1 nazwa_pliku2 [numer indeksu]”

Ale jeśli przypisać jednostkę wartość do oddzielnej zmiennej i połączyć ją ciągiem znaków nie ma miejsca? Dlatego jest to, że:

przykład:

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

wyjściowy =

która jest poprawna”\ nazwa_pliku1" ..

Odpowiedz

10

Trzeba zrobić:

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

tak, że jest oceniany jako indeksowania tablicy.

Byłoby tak w przypadku czegoś takiego dostępu właściwości obiektu lub klawisza skrótu itp obrębie łańcucha:

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

Inną alternatywą jest użycie formatowania ciągów, szczególnie przydatna, gdy masz dużo zmiennych/obiektów w ciągu:

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

Kod powinien wyglądać następująco:

$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] 
} 
Powiązane problemy