2011-12-21 14 views
5

मैं क्यों निम्नलिखित होती है, तो आपके पाससंदर्भित 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] 
} 

तो सिर्फ एक पाश लेने के माध्यम से पैदा करता है पता लगाने के लिए कोशिश कर रहा हूँ के साथ संदर्भित कर देता है:

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

सरणी [इंडेक्स] का संदर्भ देने से सही मूल्य उत्पन्न होगा, लेकिन यदि मैं स्ट्रिंग के साथ संयोजित हूं तो यह स्ट्रिंग और मान के बीच एक स्थान रखता है। जब स्ट्रिंग के भीतर रखा मैं यह सारी सामग्री को डंपिंग जाता है क्योंकि यह $ सरणी तो $ के मूल्यांकन मैं

साथ समाप्त मूल्यांकन कर रही है मान लेते हैं "। \ Filename1 filename2 [इंडेक्स नंबर]"

लेकिन अगर मैं व्यक्तिगत आवंटित एक अलग चर के लिए मूल्य और एक स्ट्रिंग के साथ इसे जोड़ना कोई जगह नहीं है? क्यों है:

उदाहरण:

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

उत्पादन =

जो सही है "\ filename1।"।

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

इतना है कि यह सरणी अनुक्रमण के रूप में मूल्यांकन किया जाता है:

उत्तर

10

आप क्या करना है।

यह स्ट्रिंग के भीतर एक वस्तु या हैश आदि के प्रमुख के गुणों तक पहुँचने की तरह कुछ के साथ मामला होगा: आप चर के बहुत सारे है जब

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]) 
3

आपका कोड इस तरह दिखना चाहिए:

$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] 
} 
संबंधित मुद्दे