2014-06-26 33 views
9

Genel değişkenlerim var ve bunları bir işlevde kullanmak istiyorum.PowerShell Global değişkenler local variable

İşlevler arasında aynı ada sahip yerel değişkenler kullanmıyorum!

# global vars: 
$Var1 = @{ .. } 
$Var2 = @(..) 
function testing{ 
    $Var1.keyX = "kjhkjh" 
    $Var2[2] = 6.89768 
} 

Bunu yapmak ve işe yarıyor, ama güvenli mi, yoksa kullanmak zorunda yapın:

$Global:Var1.keyX = "kjhkjh" 

sayesinde Gooly

sizin fonksiyonunda

cevap

20

, değiştirdiğiniz hashtable içeriği böylece işlevinizi (veya işlev ve global kapsamı arasında bir işlev arayan) $ $ Var1 ve $ Var2 (BTWeksik değilsiniz var olduğu sürece) sürece global kullanmanıza gerek yoktur). Eğer bu sizin kendi kodunuzsa, o zaman olduğu gibi bırakın. Ancak, kodunuzun diğer kişilerin kodlarının işlevinizi çağırmasına izin verirseniz, genel değişkene eriştiğinizden ve işlevinizi çağıran bir işlev içinde aynı adda bir değişkene yanlışlıkla erişmediğinizden emin olmak için $global:Var1 belirtecini kullanırdım .

PowerShell içinde dinamik kapsama alınması hakkında bilmek başka bir şey olduğunu bir fonksiyonun içinde değişkene bir değer atamak ve bu değişken küresel bir örneğin olur zaman:

$someGlobal = 7 
function foo { $someGlobal = 42; $someGlobal } 
foo 
$someGlobal 

PowerShell bir "kopya-on yapacak -write "işlevinde $ someGlobal değişkeninde işlem. Eğer niyet gerçekten sonra küresel değiştirmek olan varsa $global: belirtici kullanırsınız:

$someGlobal = 7 
function foo { $global:someGlobal = 42; $someGlobal } 
foo 
$someGlobal 
+1

size Keith ederiz (benim yazım hatası değişti)! Tam olarak kafa karıştırıcı olan şey: diziler ve karmaşıklar (başka ne?) $ Global kullanmadan bir işlev içinde değiştirilebilir: ancak normal değişkenler yapamaz. – gooly

+0

Temel olarak, başvurulan bir nesnenin içeriğini değiştirebilirsiniz (bir nesnenin özellikleri, bir dizideki öğeler, hashtabdaki öğeler). 'Global olarak kullanmadan değiştiremediğiniz şeyler: ', değişken başvuruların asıl nesnesidir (array/hashtable). –

İlgili konular