Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Editör notu
Önemli
Windows PowerShell Dil Belirtimi 3.0 Aralık 2012'de yayımlanmıştır ve Windows PowerShell 3.0'ı temel alır. Bu belirtim PowerShell'in geçerli durumunu yansıtmaz. Bu belgeleri geçerli durumu yansıtacak şekilde güncelleştirme planı yoktur. Bu belgeler, geçmişe yönelik başvuru için burada sunulmuştur.
Belirtim belgesi, Şu konumdaki Microsoft İndirme Merkezi'nden bir Microsoft Word belgesi olarak kullanılabilir: https://www.microsoft.com/download/details.aspx?id=36389 Bu Word belgesi burada Microsoft Learn'de sunu için dönüştürülmüştür. Dönüştürme sırasında, Docs platformu için biçimlendirmeye uyum sağlamak için bazı editoryal değişiklikler yapılmıştır. Bazı yazım hataları ve küçük hatalar düzeltildi.
Sözdizimi:
expression:
primary-expression
bitwise-expression
logical-expression
comparison-expression
additive-expression
multiplicative-expression
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
dashdash:
dash dash
Açıklama:
ifadesi bir yöntem, işlev, yazılabilir bir konum veya değer belirten işleçler ve işlenenler dizisidir; bir değerin hesaplamasını belirtir; bir veya daha fazla yan etki üretir; veya bunların bir bileşimini gerçekleştirir. Örneğin
- Sabit 123, int değeri 123'ü belirten bir ifadedir.
-
1,2,3,4
ifadesi, değerlerin gösterildiği 4 öğeli dizi nesnesini belirler. -
10.4 * $a
ifadesi bir hesaplama belirtir. -
$a++
ifadesi bir yan etki oluşturur. - İfade
$a[$i--] = $b[++$j]
bunların bir bileşimini gerçekleştirir.
Bazı işleçler için belirtilmedikçe, ifadedeki terimlerin değerlendirme sırası ve yan etkilerin gerçekleşme sırası belirtilmez. Belirtilmeyen davranış örnekleri şunlardır: $i++ + $i
, $i + --$i
ve $w[$j++] = $v[$j]
.
PowerShell uygulaması kullanıcı tanımlı türler için destek sağlayabilir ve bu türlerde tanımlı işlemler olabilir. Bu tür türlerin ve işlemlerin tüm ayrıntıları uygulama tanımlıdır.
üst düzey ifade, daha büyük bir ifadenin parçası olmayan ifadedir. Üst düzey ifade yan etki işleci içeriyorsa, bu ifadenin değeri işlem hattına yazılmaz; aksi takdirde, öyledir. Bunun ayrıntılı bir tartışması için bkz. §7.1.1.
Normalde, bir koleksiyonu ([§4§4]) belirten bir ifade, bu ifadenin değeri kullanıldığında kendi bileşen öğelerine numaralandırılır. Ancak, ifade bir cmdlet çağrısı olduğunda bu durum geçerli değildir. Örneğin
$x = 10,20,30
$a = $($x; 99) # $a.Length is 4
$x = New-Object 'int[]' 3
$a = $($x; 99) # equivalent, $a.Length is 4
$a = $(New-Object 'int[]' 3; 99) # $a.Length is 2
$(...)
işlecinin ilk iki kullanımda, koleksiyonu belirten ifade, üç int
değerin yanı sıra int
99 ile sonuçlanan $x
değişkenidir. Ancak üçüncü durumda, ifade bir cmdlet'ine doğrudan çağrıdır, bu nedenle sonuç numaralandırılmaz ve $a
int[3]
ve int
olmak üzere iki öğeden oluşan bir dizidir.
Bir işlem PowerShell tarafından tanımlanmamışsa, sol işlenen tarafından atanan değerin türü, uygun bir op_<operation>
yöntemi olup olmadığını kontrol etmek için incelenir.
7.1 Birincil ifadeler
Sözdizimi:
primary-expression:
value
member-access
element-access
invocation-expression
post-increment-expression
post-decrement-expression
value:
parenthesized-expression
sub-expression
array-expression
script-block-expression
hash-literal-expression
literal
type-literal
variable
7.1.1 Gruplandırma parantezleri
Sözdizimi:
İpucu
Söz dizimi tanımlarındaki ~opt~
gösterimi söz diziminde sözcüksel varlığın isteğe bağlı olduğunu gösterir.
parenthesized-expression:
( new-lines~opt~ pipeline new-lines~opt~ )
Açıklama:
Ayraçlı ifade, parantezler olmadan ifadenin sahip olduğu tür ve değer ile aynı olan birincil ifade'dir. İfade bir değişken belirlerse ayraçlı ifade aynı değişkeni belirler. Örneğin, $x.m
ve ($x).m
eşdeğerdir.
Gruplandırma ayraçları, bir ifade içinde varsayılan önceliği ve ilişkilendirmeyi belgeleyen bir ifadede kullanılabilir. Ayrıca bu varsayılan önceliği ve ilişkilendirilebilirliği geçersiz kılmak için de kullanılabilirler. Mesela
4 + 6 * 2 # 16
4 + (6 * 2) # 16 document default precedence
(4 + 6) * 2 # 20 override default precedence
Normalde, en üst düzeydeki parantez gruplamaları gereksizdir. Ancak, her zaman böyle değildir. Aşağıdaki örneği göz önünde bulundurun:
2,4,6 # Length 3; values 2,4,6
(2,4),6 # Length 2; values [object[]],int
İkinci durumda parantezler semantiği değiştirerek iki öğesi 2 int ve skaler int 6 dizisi olan bir diziyle sonuçlanır.
Başka bir özel durum daha:
23.5/2.4 # pipeline gets 9.79166666666667
$a = 1234 * 3.5 # value not written to pipeline
$a # pipeline gets 4319
birinci ve üçüncü durumlarda, sonucun değeri işlem hattına yazılır. Ancak, ikinci durumdaki ifade değerlendirilse de, yan etki işlecinin en üst düzeyde =
varlığı nedeniyle sonuç işlem hattına yazılmaz. ($a =
bölümünün kaldırılması, *
yan etki işleci olmadığından değerin yazılmasına izin verir.)
Üst düzey yan efektler içermeyen ifadelerin değerinin işlem hattına yazılmasını durdurmak için, bunu aşağıdaki gibi açıkça atın:
# None of these value are written to pipeline
[void](23.5/2.4)
[void]$a
$null = $a
$a > $null
İşlem hattına üst düzey yan efektler içeren herhangi bir ifadenin değerini yazmak için, bu ifadeyi aşağıdaki gibi parantez içine alın:
($a = 1234 * 3.5) # pipeline gets 4319
Bu nedenle, bu durumda gruplandırma parantezleri yedekli değildir.
Aşağıdaki örnekte, bir dize içinde gerçekleşen değişken ikamesi (§2.3.5.2) vardır:
">$($a = -23)<" # value not written to pipeline, get ><
">$(($a = -23))<" # pipeline gets >-23<
İlk durumda, parantezlersınırlayıcıları >
ve <
karakterleri hala yazılır.) Gruplandırma parantezi eklenirse (ikinci durumda gösterildiği gibi) yazma etkinleştirilir.
Aşağıdaki örneklerin her birinde üst düzey yan efekt işleçleri bulunur:
$a = $b = 0 # value not written to pipeline
$a = ($b = 0) # value not written to pipeline
($a = ($b = 0)) # pipeline gets 0
++$a # value not written to pipeline
(++$b) # pipeline gets 1
$a-- # value not written to pipeline
($b--) # pipeline gets 1
Üst düzey yan etkileri olmayan bir ifadenin çevresinde parantezlerin gruplanması, bu parantezlerin yedekli olmasını sağlar. Örneğin;
$a # pipeline gets 0
($a) # no side effect, so () redundant
İki yan etkisi olan ve hiçbiri en üst düzeyde olmayan aşağıdaki örneği göz önünde bulundurun:
12.6 + ($a = 10 - ++$b) # pipeline gets 21.6.
Üst düzey ifadenin yan etkisi olmadığından sonuç işlem hattına yazılır.
7.1.2 Üye erişimi
Sözdizimi:
member-access:
primary-expression . new-line~opt~ member-name
primary-expression :: new-line~opt~ member-name
"birincil ifadesinden sonraboşluk kullanılmasına izin verilmediğini unutmayın."
Açıklama:
.
işleci, bir nesneden bir örnek üyesi veya Hashtable
'den bir anahtar seçmek için kullanılır.
Sol işlenen bir nesneyi tanımlamalı ve sağ işlenen erişilebilir bir örnek elemanını tanımlamalıdır.
Sağ işlenen, sol işlenen tarafından belirlenen nesnenin türünde erişilebilir bir örnek üye tanımlar veya eğer sol işlenen bir dizi tanımlıyorsa, sağ işlenen dizinin her bir öğesi içinde erişilebilir örnek üyeleri tanımlar.
.
işlecinden önce boşluklara izin verilmez.
Bu işleç ilişkilendirici olarak bırakılır.
İşleç ::
, belirli bir türdeki statik üyeyi seçmek için kullanılır. Sol işlenen bir tür belirlemeli ve sağ işlenen bu tür içinde erişilebilir bir statik üye belirlemelidir.
::
işlecinden önce boşluklara izin verilmez.
Bu işleç ilişkilendirici olarak bırakılır.
Sağ işlenen, sol işlenenin belirlediği nesnenin türü içinde yazılabilir bir konumu gösteriyorsa, ifadenin tamamı yazılabilir bir konumu gösterir.
Örnekler:
$a = 10, 20, 30
$a.Length # get instance property
(10, 20, 30).Length
$property = "Length"
$a.$property # property name is a variable
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123
}
$h1.FirstName # designates the key FirstName
$h1.Keys # gets the collection of keys
[int]::MinValue # get static property
[double]::PositiveInfinity # get static property
$property = "MinValue"
[long]::$property # property name is a variable
foreach ($t in [byte], [int], [long]) {
$t::MaxValue # get static property
}
$a = @{ID = 1 }, @{ID = 2 }, @{ID = 3 }
$a.ID # get ID from each element in the array
7.1.3 Çağırma ifadeleri
Sözdizimi:
invocation-expression:
primary-expression . new-line~opt~ member-name argument-list
primary-expression :: new-line~opt~ member-name argument-list
argument-list:
( argument-expression-list~opt~ new-lines~opt~ )
birincil ifadesinden sonraboşluk kullanılmasına izin verilmediğini unutmayın.
Açıklama:
çağırma-ifadesi, primary-expression.member-name
veya primary-expression::member-name
tarafından belirlenen metodu çağırır.
argüman listesi içindeki ayraçlar, muhtemelen boş olan ve virgülle ayrılmış bir ifadelerdizisi içerir; bu ifadeler, değerleri yönteme geçirilen argümanlarını belirtir. Yöntem çağrılmadan önce, bağımsız değişkenler, gerekiyorsa yöntemin beklediği türlerle uyumlu hale getirilmesi için §6kurallarına göre değerlendirilir ve dönüştürülür.
primary-expression.member-name
, primary-expression::member-name
ve bağımsız değişkenlerin değerlendirme sırası belirtilmez.
Bu işleç ilişkilendirici olarak bırakılır.
çağrım ifadesi sonucunun türü, metod belirleyici (§4.5.24).
Örnekler:
[math]::Sqrt(2.0) # call method with argument 2.0
[char]::IsUpper("a") # call method
$b = "abc#$%XYZabc"
$b.ToUpper() # call instance method
[math]::Sqrt(2) # convert 2 to 2.0 and call method
[math]::Sqrt(2D) # convert 2D to 2.0 and call method
[math]::Sqrt($true) # convert $true to 1.0 and call method
[math]::Sqrt("20") # convert "20" to 20 and call method
$a = [math]::Sqrt # get method descriptor for Sqrt
$a.Invoke(2.0) # call Sqrt via the descriptor
$a = [math]::("Sq"+"rt") # get method descriptor for Sqrt
$a.Invoke(2.0) # call Sqrt via the descriptor
$a = [char]::ToLower # get method descriptor for ToLower
$a.Invoke("X") # call ToLower via the descriptor
7.1.4 Öğe erişimi
Sözdizimi:
element-access:
primary-expression [ new-lines~opt~ expression new-lines~opt~ ]
Açıklama:
birincil ifade ve sol köşeli ayraç ([
) arasında boşluk olmamalıdır.
7.1.4.1 Bir diziyi alt dizinleme
Açıklama:
Diziler §9'da ayrıntılı olarak ele alınıyor.ifade 1 boyutlu bir diziyse bkz. §7.1.4.5.
A[expression]
A[A.Length + expression]
konumunda bulunan öğesini belirler.
birincil ifade üç veya daha fazla boyuttan oluşan bir dizi belirlediğinde, 2 boyutlu dizilerin kuralları uygulanır ve boyut konumları virgülle ayrılmış değerler listesi olarak belirtilir.
Var olmayan bir öğede okuma erişimi denenirse, sonuç $null
olur. Var olmayan bir öğeye yazmak bir hatadır.
Çok boyutlu dizi alt indis ifadesi için boyut konumu ifadelerinin değerlendirme sırası belirtilmez. Örneğin, $a
3 boyutlu bir dizi verildiğinde, $a[$i++,$i,++$i]
davranışı belirtilmez.
ifade bir diziyse bkz. §7.1.4.5.
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
$a = [int[]](10,20,30) # [int[]], Length 3
$a[1] # returns int 20
$a[20] # no such position, returns $null
$a[-1] # returns int 30, i.e., $a[$a.Length-1]
$a[2] = 5 # changes int 30 to int 5
$a[20] = 5 # implementation-defined behavior
$a = New-Object 'double[,]' 3,2
$a[0,0] = 10.5 # changes 0.0 to 10.5
$a[0,0]++ # changes 10.5 to 10.6
$list = ("red",$true,10),20,(1.2, "yes")
$list[2][1] # returns string "yes"
$a = @{ A = 10 },@{ B = $true },@{ C = 123.45 }
$a[1]["B"] # $a[1] is a Hashtable, where B is a key
$a = "red","green"
$a[1][4] # returns string "n" from string in $a[1]
Var olmayan bir öğeye yazma erişimi denenirse, IndexOutOfRange özel durumu oluşturulur.
7.1.4.2 Dizeyi indeksleme
Açıklama:
birincil ifade bir dize Sbelirttiğinde, işleç []
, ifadetarafından belirtilen sıfır tabanlı konumda bulunan karakteri char olarak döndürür.
ifade bu dizenin uzunluğundan büyük veya buna eşitse, sonuç $null
olur.
ifade negatifse, S[expression]
S[S.Length + expression]
konumunda bulunan öğesini belirler.
Örnekler:
$s = "Hello" # string, Length 5, positions 0-4
$c = $s[1] # returns "e" as a string
$c = $s[20] # no such position, returns $null
$c = $s[-1] # returns "o", i.e., $s[$s.Length-1]
7.1.4.3 Hash Tablosu İndisleme
Açıklama:
ifadesi tek bir anahtar adı olduğunda, sonuç ilişkili değer olur ve bu anahtar mevcutsa bu türe sahiptir; böyle bir anahtar yoksa, sonuç $null
olur. Anahtar olarak $null
kullanılıyorsa davranış, uygulama tanımlıdır.
ifade anahtar adları dizisiyse bkz. §7.1.4.5.
ifade bir diziyse bkz. §7.1.4.5.
Örnekler:
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1['FirstName'] # the value associated with key FirstName
$h1['BirthDate'] # no such key, returns $null
$h1 = @{ 10 = "James"; 20.5 = "Anderson"; $true = 123 }
$h1[10] # returns value "James" using key 10
$h1[20.5] # returns value "Anderson" using key 20.5
$h1[$true] # returns value 123 using key $true
ifade tek bir anahtar adı olduğunda, $null
Hashtable'ı alt simgeleten tek değer olarak kullanılırsa, NullArrayIndex özel durumu oluşturulur.
7.1.4.4 XML belgesini alt düğüm oluşturma
Açıklama:
$null
olur. Sonuç yazılabilir bir konum belirlemez.
Örnekler:
$x = [xml]@"
<Name>
<FirstName>Mary</FirstName>
<LastName>King</LastName>
</Name>
"@
$x['Name'] # refers to the element Name
$x['Name']['FirstName'] # refers to the element FirstName within Name
$x['FirstName'] # No such child element at the top level, result is $null
Sonucun türü System.Xml.XmlElement
veya System.String
.
7.1.4.5 Dizi dilimleri oluşturma
Hashtable söz konusu olduğunda, dizi dilimi sağlanan anahtarlarla ilişkili değerleri içerir. Ancak, böyle bir anahtar mevcut değilse, ilgili öğe $null
olur.
$null
herhangi bir anahtar adı olarak kullanılıyorsa, davranış uygulama tanımlıdır.
Örnekler:
$a = [int[]](30,40,50,60,70,80,90)
$a[1,3,5] # slice has Length 3, value 40,60,80
$a[,5] # slice with Length 1
$a[@()] # slice with Length 0
$a[-1..-3] # slice with Length 3, value 90,80,70
$a = New-Object 'int[,]' 3,2
$a[0,0] = 10; $a[0,1] = 20; $a[1,0] = 30
$a[1,1] = 40; $a[2,0] = 50; $a[2,1] = 60
$a[(0,1),(1,0)] # slice with Length 2, value 20,30, parens needed
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1['FirstName'] # the value associated with key FirstName
$h1['BirthDate'] # no such key, returns $null
$h1['FirstName','IDNum'] # returns [object[]], Length 2 (James/123)
$h1['FirstName','xxx'] # returns [object[]], Length 2 (James/$null)
$h1[$null,'IDNum'] # returns [object[]], Length 2 ($null/123)
Windows PowerShell: ifadesi, iki veya daha fazla anahtar adından oluşan bir koleksiyon olduğunda, $null
bir anahtar adı olarak kullanılıyorsa, bu anahtar yoksayılır ve sonuçta elde edilen dizide karşılık gelen bir öğesi bulunmaz.
7.1.5 Postfix artırma ve azaltma operatörleri
Sözdizimi:
post-increment-expression:
primary-expression ++
post-decrement-expression:
primary-expression dashdash
Açıklama:
birincil ifade, yazılabilir bir konum belirlemeli ve bu konum sayısal türde (§4) bir değere veya $null
değerine sahip olmalıdır. İşleç tarafından belirlenen değer $null
ise, işleç değerlendirilmeden önce bu değer int türüne ve sıfır değerine dönüştürülür. Birincil ifade
Postfix ++
operatörü tarafından üretilen sonuç, işlenenin belirttiği değerdir. Bu sonuç elde edildikten sonra, işlenen operatör tarafından atanmış değer uygun türde 1 artırılır.
İfade E++
sonucunun türü, E + 1
(§7.7) ifadesinin sonucuyla aynıdır.
Artek --
operatörü tarafından üretilen sonuç, operand tarafından belirlenen değerdir. Bu sonuç elde edildikten sonra, işlenen tarafından belirlenen değer uygun türden 1 tarafından azalmış olur.
İfade E--
sonucunun türü, E - 1
(§7.7) ifadesinin sonucuyla aynıdır.
Bu işleçler ilişkilendirici olarak bırakılır.
Örnekler:
$i = 0 # $i = 0
$i++ # $i is incremented by 1
$j = $i-- # $j takes on the value of $i before the decrement
$a = 1,2,3
$b = 9,8,7
$i = 0
$j = 1
$b[$j--] = $a[$i++] # $b[1] takes on the value of $a[0], then $j is
# decremented, $i incremented
$i = 2147483647 # $i holds a value of type int
$i++ # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
[int]$k = 0 # $k is constrained to int
$k = [int]::MaxValue # $k is set to 2147483647
$k++ # 2147483648 is too big to fit, imp-def behavior
$x = $null # target is unconstrained, $null goes to [int]0
$x++ # value treated as int, 0->1
7.1.6 $(...) işleci
Sözdizimi:
sub-expression:
$( new-lines~opt~ statement-list~opt~ new-lines~opt~ )
Açıklama:
deyim listesi atlanırsa, sonuç $null
olur. Aksi takdirde, ifade listesi değerlendirilir. Değerlendirmenin bir parçası olarak işlem hattına yazılan tüm nesneler, sırasıyla kısıtlanmamış bir 1 boyutlu dizide toplanır. Toplanan nesnelerin dizisi boşsa, sonuç $null
olur. Toplanan nesne dizisi tek bir öğe içeriyorsa, sonuç bu öğedir; aksi takdirde sonuç, toplanan sonuçların kısıtlanmamış 1 boyutlu dizisidir.
Örnekler:
$j = 20
$($i = 10) # pipeline gets nothing
$(($i = 10)) # pipeline gets int 10
$($i = 10; $j) # pipeline gets int 20
$(($i = 10); $j) # pipeline gets [object[]](10,20)
$(($i = 10); ++$j) # pipeline gets int 10
$(($i = 10); (++$j)) # pipeline gets [object[]](10,22)
$($i = 10; ++$j) # pipeline gets nothing
$(2,4,6) # pipeline gets [object[]](2,4,6)
7.1.7 @(...) işleci
Sözdizimi:
array-expression:
@( new-lines~opt~ statement-list~opt~ new-lines~opt~ )
Açıklama:
deyimi-listesi atlanırsa, sonuç sıfır uzunluğunda kısıtlanmamış 1 boyutlu bir dizidir. Aksi takdirde, deyim listesi değerlendirilir ve değerlendirmenin bir parçası olarak işlem hattına yazılan tüm nesneler kısıtlanmamış bir 1 boyutlu dizide sırayla toplanır. Sonuç, (büyük olasılıkla boş) kısıtlanmamış 1 boyutlu dizidir.
Örnekler:
$j = 20
@($i = 10) # 10 not written to pipeline, result is array of 0
@(($i = 10)) # pipeline gets 10, result is array of 1
@($i = 10; $j) # 10 not written to pipeline, result is array of 1
@(($i = 10); $j) # pipeline gets 10, result is array of 2
@(($i = 10); ++$j) # pipeline gets 10, result is array of 1
@(($i = 10); (++$j)) # pipeline gets both values, result is array of 2
@($i = 10; ++$j) # pipeline gets nothing, result is array of 0
$a = @(2,4,6) # result is array of 3
@($a) # result is the same array of 3
@(@($a)) # result is the same array of 3
7.1.8 Betik bloğu ifadesi
Sözdizimi:
script-block-expression:
{ new-lines~opt~ script-block new-lines~opt~ }
script-block:
param-block~opt~ statement-terminators~opt~ script-block-body~opt~
script-block-body:
named-block-list
statement-list
Açıklama:
param-block§8.10.9içinde açıklanmıştır. named-block-list§8.10.7'te açıklanmıştır.
Betik bloğu, adlandırılmamış bir ifade bloğu olarak tek bir birim şeklinde kullanılabilir. Betik blokları tek bir komutmuş gibi bir kod bloğunu çağırmak için kullanılabilir veya yürütülebilecek değişkenlere atanabilir.
adlandırılmış-blok-listesi veya deyim-listesi yürütülür ve sonucun türü ve değerleri, bu deyim kümelerinin sonuçlarının türü ve değerleridir.
script-block-expression tür betik bloğu (§4.3.7).
parametre bloğu atlanırsa, betik bloğuna geçirilen bağımsız değişkenler $args
(§8.10.1) aracılığıyla kullanılabilir.
Parametre bağlama sırasında betik bloğu, betik bloğu nesnesi olarak veya betik bloğu değerlendirildikten sonra sonuç olarak geçirilebilir. Daha fazla bilgi için bkz. §6.17.
7.1.9 Hash sabit değer ifadesi
Sözdizimi:
hash-literal-expression:
@{ new-lines~opt~ hash-literal-body~opt~ new-lines~opt~ }
hash-literal-body:
hash-entry
hash-literal-body statement-terminators hash-entry
hash-entry:
key-expression = new-lines~opt~ statement
key-expression:
simple-name
unary-expression
statement-terminators:
statement-terminator
statement-terminators statement-terminator
statement-terminator:
;
new-line-character
Açıklama:
hash-literal-expression, her biri bir anahtar/değer çifti olan bir veya daha fazla öğeden oluşan bir Hashtable oluşturmak için kullanılır (§10).
Anahtarın null türü dışında herhangi bir türü olabilir. İlişkili değerlerin null türü de dahil olmak üzere herhangi bir türü olabilir ve bu değerlerin her biri, $null
dahil olmak üzere istenen değeri belirten herhangi bir ifade olabilir.
Anahtar/değer çiftlerinin sıralaması önemli değildir.
Örnekler:
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$last = "Anderson"; $IDNum = 120
$h2 = @{ FirstName = "James"; LastName = $last; IDNum = $IDNum + 3 }
$h3 = @{ }
$h4 = @{ 10 = "James"; 20.5 = "Anderson"; $true = 123 }
her biri üç anahtar/değer çifti içeren $h1
ve $h2
olmak üzere iki Karma Tablo ve boş olan üçüncü bir $h3
oluşturur. Hashtable $h4
çeşitli türlerde anahtarlara sahiptir.
7.1.10 Tür değişmez değeri ifadesi
Sözdizimi:
type-literal:
[ type-spec ]
type-spec:
array-type-name new-lines~opt~ dimension~opt~ ]
generic-type-name new-lines~opt~ generic-type-arguments ]
type-name
dimension:
,
dimension ,
generic-type-arguments:
type-spec new-lines~opt~
generic-type-arguments , new-lines~opt~ type-spec
array-type-name:
type-name [
generic-type-name:
type-name [
Açıklama:
tür değişmez değeri, bir uygulamada bazı belirtilmemiş temel türtarafından temsil edilir. Sonuç olarak, tür adı, temel alınan türün eş anlamlısıdır.
Tip literal ifadeleri çeşitli bağlamlarda kullanılır.
- Açık dönüştürmenin belirtilmesi (§6, §7.2.9)
- Tür kısıtlanmış dizi oluşturma (§9.4)
- Bir nesnenin statik üyelerine erişme (§7.1.2)
- Değişkende (§5.3) veya işlev parametresinde (§8.10.2) tür kısıtlaması belirtme
Örnekler:
[int].IsPrimitive # $true
[Object[]].FullName # "System.Object[]"
[int[,,]].GetArrayRank() # 3
Dizeleri tutmak için özelleştirilmiş genel bir yığın türü (§4.4), [Stack[string]]
olarak yazılabilir ve ilişkili dize değerlerine sahip int
anahtarları tutmak için özelleşmiş genel bir sözlük türü [Dictionary[int,string]]
olarak yazılabilir.
tür sabiti olan türü System.Type
. Yukarıda önerilen Stack[string]
türünün tam adı System.Collections.Generic.Stack[int]
. Yukarıda önerilen Dictionary[int,string]
türünün tam adı System.Collections.Generic.Dictionary[int,string]
.
7.2 Tektaraflı işleçler
Sözdizimi:
unary-expression:
primary-expression
expression-with-unary-operator
expression-with-unary-operator:
, new-lines~opt~ unary-expression
-not new-lines~opt~ unary-expression
! new-lines~opt~ unary-expression
-bnot new-lines~opt~ unary-expression
+ new-lines~opt~ unary-expression
dash new-lines~opt~ unary-expression
pre-increment-expression
pre-decrement-expression
cast-expression
-split new-lines~opt~ unary-expression
-join new-lines~opt~ unary-expression
pre-increment-expression:
++ new-lines~opt~ unary-expression
pre-decrement-expression:
dashdash new-lines~opt~ unary-expression
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
cast-expression:
type-literal unary-expression
dashdash:
dash dash
7.2.1 Üniter virgül işleci
Açıklama:
Virgül işleci (,
), türü ve değeri unary-expressionolan tek bir öğeye sahip kısıtlanmamış 1 boyutlu bir dizi oluşturur.
Bu işleç doğru ilişkilendiricidir.
Örnekler:
$a = ,10 # create an unconstrained array of 1 element, $a[0],
# which has type int
$a = ,(10,"red") # create an unconstrained array of 1 element,
$a[0],
# which is an unconstrained array of 2 elements,
# $a[0][0] an int, and $a[0][1] a string
$a = ,,10 # create an unconstrained array of 1 element, which is
# an unconstrained array of 1 element, which is an int
# $a[0][0] is the int. Contrast this with @(@(10))
7.2.2 Mantıksal DEĞİl
Sözdizimi:
logical-not-operator:
dash not
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
-not
işleci, birli ifade tarafından belirlenen değeri bool (§6.2) türüne dönüştürür ve gerekirse bu tür bir sonuç üretir.
unary ifade'in değeri True ise, sonuç False olur ve tersi de geçerlidir.
!
işleci, -not
için alternatif bir yazımıdır.
Bu işleç doğru ilişkilendiricidir.
Örnekler:
-not $true # False
-not -not $false # False
-not 0 # True
-not 1.23 # False
!"xyz" # False
7.2.3 Bit Düzeyinde DEĞİl
Sözdizimi:
bitwise-not-operator:
dash bnot
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
İşleç -bnot
, birli ifade tarafından belirlenen değeri, gerekirse bir tamsayı türüne (§6.4) dönüştürür. Dönüştürülen değer int türünde gösterilebilirse sonuç türü bu olur. Aksi takdirde, dönüştürülen değer uzun türünde gösterilebilirse sonuç türü bu olur. Aksi takdirde, ifade hatalı biçimlendirilmiş. Sonuçta elde edilen değer, dönüştürülen değerin bire bir tamamlayıcısıdır.
Bu işleç doğru ilişkilendiricidir.
Örnekler:
-bnot $true # int with value 0xFFFFFFFE
-bnot 10 # int with value 0xFFFFFFF5
-bnot 2147483648.1 # long with value 0xFFFFFFFF7FFFFFFF
-bnot $null # int with value 0xFFFFFFFF
-bnot "0xabc" # int with value 0xFFFFF543
7.2.4 Tekli artı
Açıklama:
Form + unary-expression
ifadesi, 0 + unary-expression
(§7.7) olarak yazılmış gibi değerlendirilir. Tamsayı değişmez değeri 0
, tür olarak int
'e sahiptir.
Bu işleç doğru ilişkilendiricidir.
Örnekler:
+123L # type long, value 123
+0.12340D # type decimal, value 0.12340
+"0xabc" # type int, value 2748
7.2.5 Birli eksi
Açıklama:
Form - unary-expression
ifadesi, 0 - unary-expression
(§7.7) olarak yazılmış gibi değerlendirilir. 0 tamsayı ifadesinin türü int
. Eksi işleci, §7.2içinde listelenen tire karakterlerinden herhangi biri olabilir.
Bu işleç doğru ilişkilendiricidir.
Örnekler:
-$true # type int, value -1
-123L # type long, value -123
-0.12340D # type decimal, value -0.12340
7.2.6 Prefix artırma ve azaltma işleçleri
Açıklama:
tekil ifade, sayısal türde bir değere (§4) veya $null
değerine sahip yazılabilir bir konumu belirtmelidir.
unary ifade tarafından belirlenen değer $null
ise, unary ifade'nin değeri, operatör değerlendirilmeden önce int türüne dönüştürülür ve değer sıfır yapılır.
Not
Birli ifade
Önek artırma işleci ++
için, tekli ifade değeri uygun türde 1
artırılır. Sonuç, artırma gerçekleştikten sonra yeni değerdir.
++E
ifadesi E += 1
(§7.11.2) ile eşdeğerdir.
--
ön ek azaltma işleci için, birli ifadenin değeri, uygun türdeki 1
miktarı kadar azaltılır. Sonuç, azaltma gerçekleştikten sonra yeni değerdir.
--E
ifadesi E -= 1
(§7.11.2) ile eşdeğerdir. Ön ek azaltma işleci, §7.2içindeki dashdash deseni ile eşleşen desenlerden herhangi biri olabilir.
Bu işleçler doğru ilişkilendirilir.
Örnekler:
$i = 0 # $i = 0
++$i # $i is incremented by 1
$j = --$i # $i is decremented then $j takes on the value of $i
$a = 1,2,3
$b = 9,8,7
$i = 0;
$j = 1
$b[--$j] = $a[++$i] # $j is # decremented, $i incremented, then $b[0]
# takes on the value of $a[1]
$i = 2147483647 # $i holds a value of type int
++$i # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
[int]$k = 0 # $k is constrained to int
$k = [int]::MinValue # $k is set to -2147483648
--$k # -2147483649 is too small to fit, imp-def behavior
$x = $null # target is unconstrained, $null goes to [int]0
--$x # value treated as int, 0 becomes -1
7.2.7 Tekli -join işleci
Sözdizimi:
join-operator:
dash join
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
Birli
birli ifade bir skaler değer veya koleksiyon olabilir.
Örnekler:
-join (10, 20, 30) # result is "102030"
-join (123, $false, 19.34e17) # result is "123False1.934E+18"
-join 12345 # result is "12345"
-join $null # result is ""
7.2.8 Tekli -split işleci
Sözdizimi:
split-operator:
dash split
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
Unary -split
işleci, unary-expressiontarafından belirlenen bir veya daha fazla dizeyi böler ve alt bölümlerini tek boyutlu kısıtlı bir dize dizisinde döndürür. Ardışık alt bölümler arasındaki sınırlayıcı olarak tüm bitişik boşluk karakterleri grubunu ele alır. Açık sınırlayıcı dizesi, bu işlecin ikili sürümü (§7.8.4.5) veya iki değişkeni (§7.8) kullanılarak belirtilebilir.
Sınırlayıcı metni, sonuçta elde edilen dizelere dahil değildir. Giriş dizesindeki baştaki ve sonundaki boşluk yoksayılır. Boş olan veya boşluk içeren bir giriş dizesi, yalnızca boş olan bir dize dizisiyle sonuçlanır.
tekli ifade bir skaler değer veya dize dizisi belirleyebilir.
Örnekler:
-split " red`tblue`ngreen " # 3 strings: "red", "blue", "green"
-split ("yes no", "up down") # 4 strings: "yes", "no", "up", "down"
-split " " # 1 (empty) string
7.2.9 Cast operatörü
Açıklama:
Bu işleç, unary ifade tarafından belirlenen değeri açıkça (§6) tür değişmezi (§7.1.10) tarafından belirlenen türe dönüştürür. tür sabiti void değilse, sonucun türü isim verilmiş türdür ve değer dönüştürüldükten sonraki değerdir. tür-değişmez değer geçersizse, işlem hattına hiçbir nesne yazılmaz ve bir sonuç yoktur.
Herhangi bir türdeki bir ifade, aynı türe dönüştürüldüğünde, sonuçta elde edilen tür ve değer, birli ifadenintürü ve değeri olur.
Bu işleç doğru ilişkilendiricidir.
Örnekler:
[bool]-10 # a bool with value True
[int]-10.70D # a decimal with value -10
[int]10.7 # an int with value 11
[long]"+2.3e+3" # a long with value 2300
[char[]]"Hello" # an array of 5 char with values H, e, l, l, and o.
7.3 İkili virgül işleci
Sözdizimi:
array-literal-expression:
unary-expression , new-lines~opt~ array-literal-expression
Açıklama:
İkili virgül operatörü, öğeleri, işlenenlerinin sözcük sırasına göre belirlenmiş değerleri olan 1 boyutlu bir dizi oluşturur. Dizinin türü kısıtlanmamış.
Örnekler:
2,4,6 # Length 3; values 2,4,6
(2,4),6 # Length 2; values [object[]],int
(2,4,6),12,(2..4) # Length 3; [object[]],int,[object[]]
2,4,6,"red",$null,$true # Length 6
Belirli ikili virgül ifadelerine gruplandırma ayraçlarının eklenmesi varsayılan önceliği belgelemez; bunun yerine sonucu değiştirir.
7.4 Aralık işleci
Sözdizimi:
range-expression:
unary-expression .. new-lines~opt~ unary-expression
Açıklama:
aralık-ifadesi, öğeleri aralık sınırları tarafından belirtilen int dizisinin değerleri olan kısıtlanmamış bir 1 boyutlu dizi oluşturur. Gerektiğinde operatörler tarafından belirlenen değerler intolarak dönüştürülür (§6.4). Dönüştürmeden sonra daha düşük değeri belirten işlenen alt sınırolurken, dönüştürmeden sonra daha yüksek değeri belirten işlenen üst sınırolur. Her iki sınır da aynı olabilir, bu durumda sonuçta elde edilen dizi 1
uzunluğa sahiptir.
Sol işlenen alt sınırı belirtirse, sıralama artar. Sol işlenen üst sınırı belirtirse, sıralama azalan şekilde olur.
Kavramsal olarak, bu işleç karşılık gelen ikili virgül işleç dizisi için bir kısayoldur. Örneğin, 5..8
aralığı 5,6,7,8
kullanılarak da oluşturulabilir. Ancak, bir diziye sahip olmadan artan veya azalan bir dizi gerekiyorsa, bir uygulama gerçek dizi oluşturmaktan kaçınabilir. Örneğin, foreach ($i in 1..5) { ... }
içinde dizi oluşturulması gerekmez.
Dizi dilimini (§9,9) belirtmek için aralık-ifade kullanılabilir.
Örnekler:
1..10 # ascending range 1..10
-495..-500 # descending range -495..-500
16..16 # sequence of 1
$x = 1.5
$x..5.40D # ascending range 2..5
$true..3 # ascending range 1..3
-2..$null # ascending range -2..0
0xf..0xa # descending range 15..10
7.5 Biçim işleci
Sözdizimi:
format-expression:
format-specification-string format-operator new-lines~opt~ range-expression
format-operator:
dash f
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
biçim-ifadesi, aralık ifadesi tarafından belirlenen bir veya daha fazla değeri, biçim-ifadesitarafından belirlenen biçim özellik dizgisi göre biçimlendirmektedir.
aralık-ifade tarafından belirlenen değerlerin konumları sıfırdan başlayarak numaralandırılır ve alfabetik sırayla artar. Sonucun türü string
.
Biçim belirtimi dizesi, her birinde aşağıdaki forma sahip sıfır veya daha fazla biçim belirtimi içerebilir:
{N [ ,M ][ : FormatString ]}
$null
ve void türü değeri boş dizeler olarak biçimlendirilir. Diziler alt ifade (§7.1.6) için olarak biçimlendirilir.
{
ve }
karakterlerini biçim sınırlayıcıları olarak yorumlanmadan bir biçim belirtimine eklemek için, bunları sırasıyla {{
ve }}
olarak yazın.
Biçim belirtimlerinin tam tanımı için Ecma Teknik Raporu TR/84System.IFormattable
türüne bakın.
Örnekler:
"__{0,3}__" -f 5 # __ 5__
"__{0,-3}__" -f 5 # __5 __
"__{0,3:000}__" -f 5 # __005__
"__{0,5:0.00}__" -f 5.0 # __ 5.00__
"__{0:C}__" -f 1234567.888 # __$1,234,567.89__
"__{0:C}__" -f -1234.56 # __($1,234.56)__
"__{0,12:e2}__" -f 123.456e2 # __ 1.23e+004__
"__{0,-12:p}__" -f -0.252 # __-25.20 % __
$i = 5; $j = 3
"__{0} + {1} <= {2}__" -f $i,$j,($i+$j) # __5 + 3 <= 8__
$format = "__0x{0:X8}__"
$format -f 65535 # __0x0000FFFF__
Biçim belirtiminde, N varolmayan bir konuma başvuruyorsa, bir FormatError oluşur.
7.6 Çarpımlı işleçler
Sözdizimi:
multiplicative-expression:
multiplicative-expression * new-lines~opt~ format-expression
multiplicative-expression / new-lines~opt~ format-expression
multiplicative-expression % new-lines~opt~ format-expression
7.6.1 Çarpma
Açıklama:
Çarpma işleci *
sonucu, her zamanki aritmetik dönüştürmeler (§6.15) uygulandıktan sonra iki işlenen tarafından belirlenen değerlerin çarpımından oluşur.
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
12 * -10L # long result -120
-10.300D * 12 # decimal result -123.600
10.6 * 12 # double result 127.2
12 * "0xabc" # int result 32976
7.6.2 Dize çoğaltma
Açıklama:
Sol işlenen bir dizeyi belirttiğinde, ikili *
operatörü, sol işleneni içeren bir dizenin, sağ işlenenin değerinin tamsayı türüne dönüştürülmesiyle belirlenen sayıda kopyalanarak oluşturulmasını sağlar (§6.4).
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
"red" * "3" # string replicated 3 times
"red" * 4 # string replicated 4 times
"red" * 0 # results in an empty string
"red" * 2.3450D # string replicated twice
"red" * 2.7 # string replicated 3 times
7.6.3 Dizi çoğaltma
Açıklama:
Sol işlenen bir diziyi belirlediğinde, ikili *
operatörü, sol işlenenin belirttiği değeri, sağ işlenenin değeri tamsayı türüne dönüştürüldüğünde belirtilen sayı kadar tekrar eden yeni bir kısıtlanmamış 1 boyutlu dizi oluşturur (§6.4). Sıfır çoğaltma sayısı, 1 uzunluğunda bir diziyle sonuç verir. Sol işlenen çok boyutlu bir diziyi gösterirse, kullanılmadan önce düzleştirilmiştir (§9,12).
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
$a = [int[]](10,20) # [int[]], Length 2*1
$a * "3" # [object[]], Length 2*3
$a * 4 # [object[]], Length 2*4
$a * 0 # [object[]], Length 2*0
$a * 2.3450D # [object[]], Length 2*2
$a * 2.7 # [object[]], Length 2*3
(New-Object 'float[,]' 2,3) * 2 # [object[]], Length 2*2
7.6.4 Tümeni
Açıklama:
Bölme işleci /
sonucu, sol işlenen tarafından belirlenen değer, normal aritmetik dönüştürmeler (§6,15) uygulandıktan sonra sağ işlenen tarafından belirlenen değere bölünür.
Sıfıra kadar tamsayı veya ondalık bölme gerçekleştirmeye çalışılırsa, uygulama tanımlı sonlandırma hatası oluşur.
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
10/-10 # int result -1
12/-10 # double result -1.2
12/-10D # decimal result 1.2
12/10.6 # double result 1.13207547169811
12/"0xabc" # double result 0.00436681222707424
Sıfıra göre tamsayı veya ondalık bölme gerçekleştirmeye çalışılırsa, RuntimeException özel durumu oluşturulur.
7.6.5 Kalan
Açıklama:
Sol işlenendeki değer, normal aritmetik dönüştürmeler (§6.15) uygulandıktan sonra sağ işlenendeki değere bölündüğünde, elde edilen kalan, kalan operatörü %
ile belirlenen sonuçtur.
Sıfıra kadar tamsayı veya ondalık bölme gerçekleştirmeye çalışılırsa, uygulama tanımlı sonlandırma hatası oluşur.
Örnekler:
10 % 3 # int result 1
10.0 % 0.3 # double result 0.1
10.00D % "0x4" # decimal result 2.00
Sıfıra göre tamsayı veya ondalık bölme gerçekleştirmeye çalışılırsa, RuntimeException özel durumu oluşturulur.
7.7 Ekleme işleçleri
Sözdizimi:
additive-expression:
primary-expression + new-lines~opt~ expression
primary-expression dash new-lines~opt~ expression
dash: one of
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
7.7.1 Toplama
Açıklama:
Toplama işleci +
sonucu, normal aritmetik dönüştürmeler (§6.15) uygulandıktan sonra iki işlenenin belirttiği değerlerin toplamıdır.
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
12 + -10L # long result 2
-10.300D + 12 # decimal result 1.700
10.6 + 12 # double result 22.6
12 + "0xabc" # int result 2760
7.7.2 Dize birleştirme
Açıklama:
Sol işlenen bir dize belirlediğinde, ikili +
işleci, sağ işlenen tarafından tür dizesine dönüştürülecek şekilde belirlenen değerlerin (§6,8) hemen ardından sol işlenen tarafından belirlenen değeri içeren yeni bir dize oluşturur.
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
"red" + "blue" # "redblue"
"red" + "123" # "red123"
"red" + 123 # "red123"
"red" + 123.456e+5 # "red12345600"
"red" + (20,30,40) # "red20 30 40"
7.7.3 Dizi birleştirme
Açıklama:
Sol işlenen bir dizi belirlediğinde, ikili +
işleci, sol işlenen tarafından belirlenen öğeleri ve ardından sağ işlenen tarafından belirlenen değerleri hemen içeren yeni bir kısıtlanmamış 1 boyutlu dizi oluşturur. her iki işlenende de bulunan çok boyutlu diziler kullanılmadan önce düzleştirilmiştir (§9,12).
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
$a = [int[]](10,20) # [int[]], Length 2
$a + "red" # [object[]], Length 3
$a + 12.5,$true # [object[]], Length 4
$a + (New-Object 'float[,]' 2,3) # [object[]], Length 8
(New-Object 'float[,]' 2,3) + $a # [object[]], Length 8
7.7.4 Hash Tablosu birleştirme
Açıklama:
her iki işlenen de Hashtable'ları belirlediğinde, ikili +
işleci, sol işlenen tarafından belirlenen öğeleri ve ardından hemen sağ işlenen tarafından belirlenen öğeleri içeren yeni bir Hashtable oluşturur.
Hashtable'lar aynı anahtarı içeriyorsa, uygulama tanımlı bir sonlandırma hatası oluşur.
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
$h1 = @{ FirstName = "James"; LastName = "Anderson" }
$h2 = @{ Dept = "Personnel" }
$h3 = $h1 + $h2 # new Hashtable, Count = 3
Karma Tablolar aynı anahtarı içeriyorsa, türünde bir BadOperatorArgument özel durumu oluşturulur.
7.7.5 Çıkarma
Açıklama:
Çıkarma işleci -
'ın sonucu, normal aritmetik dönüştürmeler (§6.15) uygulandıktan sonra, sol işlenenin belirlediği değerden sağ işlenenin belirlediği değerin çıkarılmasıyla elde edilen farktır. Çıkarma işleci, §7.7'te listelenen tire karakterlerinden herhangi biri olabilir.
Bu işleç ilişkilendirici olarak bırakılır.
Örnekler:
12 - -10L # long result 22
-10.300D - 12 # decimal result -22.300
10.6 - 12 # double result -1.4
12 - "0xabc" # int result -2736
7.8 Karşılaştırma işleçleri
Sözdizimi:
comparison-expression:
primary-expression comparison-operator new-lines~opt~ expression
comparison-operator:
equality-operator
relational-operator
containment-operator
type-operator
like-operator
match-operator
Açıklama:
Sol işlenenin belirlediği değerin türü, gerekirse sağ işleneden gelen değerin nasıl dönüştürüleceğini belirler (§6) ve bu dönüşüm, karşılaştırma yapılmadan önce gerçekleştirilir.
Bazı karşılaştırma işleçleri, biri büyük/küçük harfe duyarlı (-c<operator>
) ve diğeri büyük/küçük harfe duyarlı olmayan (-i<operator>
) olmak üzere iki değişkene sahiptir.
-<operator>
sürümü -i<operator>
ile eşdeğerdir. Büyük/küçük harf duyarlılığı yalnızca dize türündeki değerlerin karşılaştırılmasıyla anlamlıdır. Dize olmayan karşılaştırma bağlamlarında iki değişken aynı şekilde davranır.
Bu işleçler ilişkilendirici olarak bırakılır.
7.8.1 Eşitlik ve ilişkisel işleçler
Sözdizimi:
equality-operator: one of
dash eq dash ceq dash ieq
dash ne dash cne dash ine
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
relational-operator: one of
dash lt dash clt dash ilt
dash le dash cle dash ile
dash gt dash cgt dash igt
dash ge dash cge dash ige
Açıklama:
İki eşitlik işleci vardır: eşitlik (-eq
) ve eşitsizlik (-ne
); ve dört ilişkisel işleç: küçüktür (-lt
), küçüktür veya eşittir (-le
), büyüktür (-gt
) ve büyüktür veya eşittir (-ge
). Bunların her biri iki değişkene sahiptir (§7.8).
İki dizenin eşit kabul edilmesi için, bunların uzunluğu ve içeriği aynı olmalı ve uygunsa harflerin büyük/küçük durumu da aynı olmalıdır.
Sol işlenenin belirlediği değer bir koleksiyon değilse, sonuç türü bool
olur.
Aksi takdirde sonuç, sağ işlenen tarafından belirlenen değerle karşılaştırıldığında doğru sonuç veren koleksiyonun öğelerini içeren, muhtemelen boş ve kısıtlanmamış 1 boyutlu bir dizidir.
Örnekler:
10 -eq "010" # True, int comparison
"010" -eq 10 # False, string comparison
"RED" -eq "Red" # True, case-insensitive comparison
"RED" -ceq "Red" # False, case-sensitive comparison
"ab" -lt "abc" # True
10,20,30,20,10 -ne 20 # 10,30,10, Length 3
10,20,30,20,10 -eq 40 # Length 0
10,20,30,20,10 -ne 40 # 10,20,30,20,10, Length 5
10,20,30,20,10 -gt 25 # 30, Length 1
0,1,30 -ne $true # 0,30, Length 2
0,"00" -eq "0" # 0 (int), Length 1
7.8.2 Kapsama işleçleri
Sözdizimi:
containment-operator: one of
dash contains dash ccontains dash icontains
dash notcontains dash cnotcontains dash inotcontains
dash in dash cin dash iin
dash notin dash cnotin dash inotin
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
Dört kapsama işleci vardır: contains (-contains
), does-not-contain (-notcontains
), in (-in
) ve not-in (-notin
). Bunların her biri iki değişkene sahiptir (§7.8).
Kapsama işleçleri, bir değerin dizi öğelerinde en az bir kez oluşup oluşmadığını (veya oluşmadığını) gösteren bool türünde bir sonuç döndürür.
-contains
ve -notcontains
ile değer sağ işlenen tarafından, dizi ise sol işlenen tarafından belirlenir. -in ve -notin
ile işlenenler ters çevrilir. Sol işleç değeri, sağ işleç ise diziyi belirler.
Bu işleçlerin amaçları doğrultusunda, dizi işleneninin skaler değeri varsa, skaler değer bir öğenin dizisi olarak kabul edilir.
Örnekler:
10,20,30,20,10 -contains 20 # True
10,20,30,20,10 -contains 42.9 # False
10,20,30 -contains "10" # True
"10",20,30 -contains 10 # True
"010",20,30 -contains 10 # False
10,20,30,20,10 -notcontains 15 # True
"Red",20,30 -ccontains "RED" # False
7.8.3 Tür testi ve dönüştürme işleçleri
Sözdizimi:
type-operator: one of
dash is
dash as
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
tür işleci -is
, sol işlenen tarafından belirlenen değerin türü olup olmadığını veya türüne sahip olan ve sağ işlenen tarafından belirlenen bir türden türetilip türetildiğini sınar. Doğru işlenen, bir türe dönüştürülebilecek bir tür veya değer (türü adlandıran dize gibi) belirlemelidir.
Sonucun türü bool
. tür işleci -isnot
ilgili -is
formunun mantıksal olumsuzlamasını döndürür.
tür işleci -as
sol işlenen tarafından belirlenen değeri sağ işlenen tarafından belirlenen türe dönüştürmeye çalışır. Doğru işlenen, bir türe dönüştürülebilecek bir tür veya değer (türü adlandıran dize gibi) belirlemelidir. Dönüştürme başarısız olursa $null
döndürülür; aksi takdirde, dönüştürülen değer döndürülür ve bu sonucun dönüş türü dönüştürülen değerin çalışma zamanı türüdür.
Örnekler:
$a = 10 # value 10 has type int
$a -is [int] # True
$t = [int]
$a -isnot $t # False
$a -is "int" # True
$a -isnot [double] # True
$x = [int[]](10,20)
$x -is [int[]] # True
$a = "abcd" # string is derived from object
$a -is [object] # True
$x = [double]
foreach ($t in [int],$x,[decimal],"string") {
$b = (10.60D -as $t) * 2 # results in int 22, double 21.2
} # decimal 21.20, and string "10.6010.60"
7.8.4 Desen eşleştirme ve metin işleme işleçleri
7.8.4.1 -like ve -notlike işleçleri
Sözdizimi:
like-operator: one of
dash like dash clike dash ilike
dash notlike dash cnotlike dash inotlike
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
Eğer sol işlenen bir koleksiyonu belirlemezse, sonucun türü bool
olur. Aksi takdirde sonuç, sağ operand tarafından belirlenen değerle karşılaştırıldığında True değerini veren koleksiyonun öğelerini içeren, muhtemelen boş bir 1 boyutlu dizidir. Sağ işlenen, joker karakter ifadelerini (§3.15) içeren bir dizeyi belirtebilir. Bu işleçler iki değişkene sahiptir (§7.8).
Örnekler:
"Hello" -like "h*" # True, starts with h
"Hello" -clike "h*" # False, does not start with lowercase h
"Hello" -like "*l*" # True, has an l in it somewhere
"Hello" -like "??l" # False, no length match
"-abc" -like "[-xz]*" # True, - is not a range separator
"#$%\^&" -notlike "*[A-Za-z]" # True, does not end with alphabetic character
"He" -like "h[aeiou]?*" # False, need at least 3 characters
"When" -like "*[?]" # False, ? is not a wildcard character
"When?" -like "*[?]" # True, ? is not a wildcard character
"abc","abbcde","abcgh" -like "abc*" # object[2], values
"abc" and "abcgh"
7.8.4.2 -match ve -notmatch işleçleri
Sözdizimi:
match-operator: one of
dash match dash cmatch dash imatch
dash notmatch dash cnotmatch dash inotmatch
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
Sol işlenen bir koleksiyon belirtmezse, sonuç türü bool
olur ve bu sonuç $true
ise, Hashtable $matches
'nin öğeleri, sağ işlenen tarafından belirlenen değerle eşleşen (veya eşleşmeyen) dizeler olarak ayarlanır. Aksi takdirde sonuç, doğru işlenen tarafından belirlenen değerle karşılaştırıldığında True'yu test eden koleksiyonun öğelerini içeren büyük olasılıkla boş bir kısıtlanmamış 1 boyutlu dizidir ve $matches
ayarlanmamıştır. Sağ işlenen, normal ifadeler (§3.16) içeren bir dize belirleyebilir, bu durumda buna olarak adlandırılan bir kalıp denir. Bu işleçler iki değişkene sahiptir (§7.8).
Bu işleçler alt eşleşmeleri destekler (§7.8.4.6).
Örnekler:
"Hello" -match ".l" # True, $matches key/value is 0/"el"
"Hello" -match '\^h.*o$' # True, $matches key/value is
0/"Hello"
"Hello" -cmatch '\^h.*o$' # False, $matches not set
"abc\^ef" -match ".\\\^e" # True, $matches key/value is 0/"c\^e"
"abc" -notmatch "[A-Za-z]" # False
"abc" -match "[\^A-Za-z]" # False
"He" -match "h[aeiou]." # False, need at least 3 characters
"abc","abbcde","abcgh" -match "abc.*" # Length is 2, values "abc", "abcgh"
7.8.4.3 -replace işleci
Sözdizimi:
binary-replace-operator: one of
dash replace dash creplace dash ireplace
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
-replace
işleci, sağ işlenen tarafından belirlenen değerleri kullanarak sol işlenen tarafından belirlenen bir veya daha fazla dizede metin değişimine izin verir. Bu işleç iki değişkene sahiptir (§7.8). Sağ işlenen aşağıdaki biçimlerden birine sahiptir:
- Bulunacak olan ve normal ifadeler (§3.16) içerebilen dize. Bu durumda, değiştirme dizesi örtük olarak "".
- Konumlandırılacak dizeyi ve ardından değiştirme dizesini içeren 2 nesneden oluşan bir dizi.
Sol işlenen bir dizeyi belirlirse, sonuç tür dizesine sahiptir. Sol işlenen 1 boyutlu bir dize dizisi belirlemişse, sonuç uzunluğu sol işlenenin dizisiyle aynı olan ve değiştirme tamamlandıktan sonra giriş dizelerini içeren kısıtlanmamış bir 1 boyutlu dizidir.
Bu işleç alt eşleşmeleri (§7.8.4.6) destekler.
Örnekler:
"Analogous","an apple" -replace "a","*" # "*n*logous","*n *pple"
"Analogous" -creplace "[aeiou]","?" # "An?l?g??s"
"Analogous","an apple" -replace '\^a',"%%A" # "%%Analogous","%%An apple"
"Analogous" -replace "[aeiou]",'$&$&' # "AAnaaloogoouus"
7.8.4.4 İkili -join işleci
Sözdizimi:
binary-join-operator: one of
dash join
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
İkili -join
operatörü, gerekirse dizeye (§6.7) dönüştürüldükten sonra sol işlenen tarafından belirlenen bir veya daha fazla nesnenin değerinin birleştirilmesiyle oluşan bir dize üretir. Sağ işlenen tarafından belirlenen dize, sonuçta elde edilen dizedeki (muhtemelen boş) değerleri ayırmak için kullanılır.
Sol operatör bir skaler değer veya koleksiyon yapısı olabilir.
Örnekler:
(10, 20, 30) -join "\|" # result is "10\|20\|30"
12345 -join "," # result is "12345", no separator needed
($null,$null) -join "<->" # result is "<->", two zero-length values
7.8.4.5 İkili -split işleci
Sözdizimi:
binary-split-operator: one of
dash split dash csplit dash isplit
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
İkili -split
işleci, sol işlenen tarafından belirlenen bir veya daha fazla dizeyi böler ve alt bölümlerini kısıtlanmış bir 1 boyutlu dize dizisinde döndürür. Bu işleç iki değişkene sahiptir (§7.8). Sol işlenen bir skaler değer veya dize dizisi belirleyebilir. Sağ operand aşağıdaki biçimlerden birine sahiptir:
- sınırlayıcı dizesi
- Sınırlayıcı dizesini ve ardından sayısal bölme sayısını içeren 2 nesneden oluşan bir dizi
- Sınırlayıcı dizesi, sayısal bölme sayısı ve seçenekleri dizesi içeren 3 nesneden oluşan bir dizi
- Betik bloğu
- Betik bloğu ve ardından sayısal bir bölme sayısı içeren iki nesneden oluşan bir dizi
Sınırlayıcı dizesi normal ifadeler içerebilir (§3.16). Giriş dizeleriyle alt parçaları bulmak için kullanılır. Sınırlayıcı, sonuçta elde edilen dizelere dahil değildir. Sol işlenen boş bir dizeyi belirtirse, bu boş bir dize öğesiyle sonuçlanır. Sınırlayıcı dizesi boş bir dizeyse, giriş dizelerindeki her karakter konumunda bulunur.
Varsayılan olarak, giriş dizelerinin tüm alt parçaları sonucta ayrı öğeler olarak yerleştirilir; ancak, bölme sayısı bu davranışı değiştirmek için kullanılabilir. Bu sayı negatif, sıfır veya giriş dizesindeki alt bölüm sayısından büyük veya buna eşitse, her alt bölüm ayrı bir öğeye gider. Bu sayı giriş dizesindeki alt bölüm sayısından azsa, sonuçta sayı öğeleri vardır ve son öğe ilk sayısının ötesindeki tüm alt parçaları içerir - 1 alt bölümler.
Seçenekler dizesi, sıfır veya daha fazla seçenek adı içerir ve her bitişik çift, virgülle ayrılır. Baştaki, sondaki ve gömülü boşluk yoksayılır. Seçenek adları herhangi bir sırada olabilir ve büyük/küçük harfe duyarlıdır.
Bir seçenek dizesi SimpleMatch
Seçenek adları kümesi aşağıdadır:
Seçenek | Açıklama |
---|---|
KültürelBağımsız | Sınırlayıcıyı değerlendirirken dildeki kültürel farklılıkları yoksayar. |
ExplicitCapture | Sonuç listesinde yalnızca açık yakalama gruplarının döndürülmesi için isimlendirilmemiş eşleşme gruplarını yoksayar. |
IgnoreCase |
-csplit kullanılıp kullanılmasa bile büyük/küçük harfe duyarsız eşleştirmeyi zorla. |
IgnorePatternWhitespace | Boş boş alanı ve sayı işareti (# ) ile işaretlenmiş açıklamaları yoksayar. |
Çok satırlı | Bu mod, satır ve dizelerin başlangıcını ve sonunu tanır. Varsayılan mod tek satırlı. |
RegexMatch | Sınırlayıcıyı değerlendirmek için normal ifade eşleştirmeyi kullanın. Varsayılan değer budur. |
SimpleMatch | Sınırlayıcıyı değerlendirirken basit dize karşılaştırması kullanın. |
Tek Satırlı | Bu mod yalnızca dizelerin başlangıcını ve sonunu tanır. Varsayılan moddur. |
Betik bloğu (§7.1.8), sınırlayıcıyı belirleyecek kuralları tanımlar ve bool türünde değerlendirilmelidir.
Örnekler:
"one,forty two,," -split "," # 5 strings: "one" "forty two" "" ""
"abc","de" -split "" # 9 strings: "" "a" "b" "c" "" "" "d" "e" ""
"ab,cd","1,5,7,8" -split ",", 2 # 4 strings: "ab" "cd" "1" "5,7,8"
"10X20x30" -csplit "X", 0, "SimpleMatch" # 2 strings: "10" "20x30"
"analogous" -split "[AEIOU]", 0, "RegexMatch, IgnoreCase"
# 6 strings: "" "n" "l" "g" "" "s"
"analogous" -split { $_ -eq "a" -or $_ -eq "o" }, 4
# 4 strings: "" "n" "l" "gous"
7.8.4.6 Alt Eşleşmeler
-match
, -notmatch
ve -replace
tarafından eşleşen desen, parantezlerle ayrılmış (alt eşleşmeleriolarak adlandırılır) alt bölümler içerebilir. Aşağıdaki örneği göz önünde bulundurun:
"red" -match "red"
Sonuç $true
ve $matches
0 tuşu, sol işlenen tarafından belirlenen dizenin sağ işlenen tarafından belirlenen desenle tam olarak eşleşen kısmını içeren "kırmızı" değerini içerir.
Aşağıdaki örnekte, desenin tamamı bir alt eşleşmedir:
"red" -match "(red)"
Daha önce olduğu gibi, 0 anahtarı "kırmızı" içerir; ancak 1 anahtarı da, sol işlenen tarafından belirlenen ve alt eşleşmeyle tam olarak eşleşen dizenin ilgili bölümü olan "kırmızı" değerini içerir.
Aşağıdaki daha karmaşık deseni göz önünde bulundurun:
"red" -match "((r)e)(d)"
Bu desen "re", "r", "d" veya "red" alt eşleşmelerine izin verir.
0 anahtarında da "kırmızı" ifadesi yer alır. Anahtar 1 "re" içerir, 2. anahtar "r" ve 3. anahtar "d" içerir. Anahtar/değer çiftleri, desende soldan sağa doğru eşleşen sıradadır ve daha uzun dize eşleşmeleri daha kısa olanlardan önce olur.
-replace
söz konusu olduğunda, değiştirilen metin $n
formun adları aracılığıyla alt dizinlere erişebilir; burada ilk eşleşme $1
, ikincisi $3
vb. olur. Örneğin
"Monday morning" -replace '(Monday|Tuesday) (morning|afternoon|evening)','the $2 of $1'
Sonuçta elde edilen dize "Pazartesi sabahı"dır.
$matches
'de anahtarların sıfır tabanlı dizinler olması yerine, alt eşleşmeler ?<*name*>
formu kullanılarak adlandırılabilir. Örneğin, "((r)e)(d)"
m1
, m2
ve m3
adlı üç alt eşlemeyle aşağıdaki gibi yazılabilir: "(?<m1>(?<m2>r)e)(?<m3>d)"
.
7.8.5 Shift işleçleri
Sözdizimi:
shift-operator: one of
dash shl
dash shr
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Açıklama:
Shift left (-shl
) işleci ve shift right (-shr
) işleci, sol işlenen tarafından tasarlanan değeri bir tamsayı türüne, sağ işlenen tarafından belirlenen değeri ise gerekirse normal aritmetik dönüştürmeleri kullanarak int'e dönüştürür (§6,15).
Sola kaydırma operatörü, sol işleneni aşağıda açıklanan şekilde hesaplanan bir miktar bit kadar sola kaydırır. Düşük sıralı boş bit konumları sıfır olarak ayarlanır.
Sağa kaydırma işleci, sol işleneni aşağıda hesaplandığı gibi belirli bir bit sayısı kadar sağa kaydırır. Sol işlenenin düşük seviyeli bitleri atılır, geri kalan bitler ise sağa kaydırılır. Sol işlenen imzalı bir değer olduğunda, sol işlenen negatif değilse yüksek sıralı boş bit konumları sıfıra ayarlanır ve sol işlenen negatifse bir olarak ayarlanır. Sol işlenen işaretsiz bir değer olduğunda, yüksek sıradaki boş bit pozisyonları sıfır olarak ayarlanır.
Sol işlenenin türü int olduğunda, kaydırma miktarı, sağ işlenenin düşük sıralı beş bitine göre belirlenir. Doğru işlenenin türü uzun olduğunda, kaydırma sayısı doğru işlenenin düşük dereceli altı biti tarafından belirlenir.
Örnekler:
0x0408 -shl 1 # int with value 0x0810
0x0408 -shr 3 # int with value 0x0081
0x100000000 -shr 0xfff81 # long with value 0x80000000
7,9 Bit düzeyli işleçler
Sözdizimi:
bitwise-expression:
unary-expression -band new-lines~opt~ unary-expression
unary-expression -bor new-lines~opt~ unary-expression
unary-expression -bxor new-lines~opt~ unary-expression
Açıklama:
bit düzeyinde AND işleci -band
, bit düzeyinde OR işleci -bor
ve bit tabanlı XOR işleci -bxor
, işlenenleri tarafından belirlenen değerleri, gerekirse normal aritmetik dönüştürmeleri kullanarak tamsayı türlerine (§6,15) dönüştürür. Dönüştürmeden sonra, her iki değerin de türü int ise, sonuç da int türünde olur. Aksi takdirde, her iki değerin de türü 'long' ise, sonucun türü de 'long' olur.
Bir değerin türü int ve diğerinin türü uzun ise, sonucun türü uzun olur.
Aksi takdirde ifade hatalı biçimlendirilmiştir. Sonuç, dönüştürülmüş olabilecek işlenen değerlerinin bit düzeyinde VE, bit düzeyinde VEYA veya bit düzeyinde XOR işlemidir.
Bu işleçler ilişkilendirici olarak bırakılır. İşlenenlerin hiçbiri yan etki içermiyorsa, bunlar commutative olur.
Örnekler:
0x0F0F -band 0xFE # int with value 0xE
0x0F0F -band 0xFEL # long with value 0xE
0x0F0F -band 14.6 # long with value 0xF
0x0F0F -bor 0xFE # int with value 0xFFF
0x0F0F -bor 0xFEL # long with value 0xFFF
0x0F0F -bor 14.40D # long with value 0xF0F
0x0F0F -bxor 0xFE # int with value 0xFF1
0x0F0F -bxor 0xFEL # long with value 0xFF1
0x0F0F -bxor 14.40D # long with value 0xF01
0x0F0F -bxor 14.6 # long with value 0xF00
7.10 Mantıksal işleçler
Sözdizimi:
logical-expression:
unary-expression -and new-lines~opt~ unary-expression
unary-expression -or new-lines~opt~ unary-expression
unary-expression -xor new-lines~opt~ unary-expression
Açıklama:
Mantıksal AND işleci -and
, operantları tarafından belirlenen değerlerini gerekirse bool
'e dönüştürür (§6.2). Sonuç, dönüştürülebilir işlenen değerlerinin mantıksal AND değeridir ve türü bool
olur. Sol operand Yanlış olarak değerlendirilirse sağ operand değerlendirilmez.
Mantıksal OR işleci -or
, işlenenleri tarafından belirlenen değerleri gerekirse bool
değerine dönüştürür (§6.2). Sonuç, muhtemelen dönüştürülmüş işlenen değerlerin mantıksal VEYA'sıdır ve bool
türüne sahiptir. Sol işlenen doğru olarak değerlendirildiğinde, sağ işlenen değerlendirilmez.
Mantıksal XOR işleci -xor
, işlenenlerin belirttiği değerleri bool
(§6.2) olarak dönüştürür. Sonuç, dönüştürülebilir işlenen değerlerinin mantıksal XOR değeridir ve türü bool
olur.
Bu işleçler ilişkilendirici olarak bırakılır.
Örnekler:
$j = 10
$k = 20
($j -gt 5) -and (++$k -lt 15) # True -and False -> False
($j -gt 5) -and ($k -le 21) # True -and True -> True
($j++ -gt 5) -and ($j -le 10) # True -and False -> False
($j -eq 5) -and (++$k -gt 15) # False -and True -> False
$j = 10
$k = 20
($j++ -gt 5) -or (++$k -lt 15) # True -or False -> True
($j -eq 10) -or ($k -gt 15) # False -or True -> True
($j -eq 10) -or (++$k -le 20) # False -or False -> False
$j = 10
$k = 20
($j++ -gt 5) -xor (++$k -lt 15) # True -xor False -> True
($j -eq 10) -xor ($k -gt 15) # False -xor True -> True
($j -gt 10) -xor (++$k -le 25) # True -xor True -> False
7.11 Atama işleçleri
Sözdizimi:
assignment-expression:
expression assignment-operator statement
assignment-operator: *one of
= dash = += *= /= %=
Açıklama:
Atama işleci bir değeri=
üzerine bir tartışma için bakınız §7.11.1. Diğer tüm atama işleçlerinin tartışması için bkz. §7.11.2.
Atama ifadesi, atama gerçekleştikten sonra ifade tarafından belirlenen değere sahiptir; ancak, bu atama ifadesi kendi başına yazılabilir bir konum belirlemez. ifade türü kısıtlanmışsa (§5.3), bu kısıtlamada kullanılan tür sonucun türüdür; aksi takdirde, sonucun türü normal aritmetik dönüştürmeler (§6.15) uygulandıktan sonraki türdür.
Bu işleç doğru ilişkilendiricidir.
7.11.1 Basit atama
Açıklama:
basit atama (=
) ifadesinde, deyimi tarafından belirlenen değer, ifadesitarafından belirlenen yazılabilir konumda depolanan değerin yerini alır. Ancak,
Dil bilgisi tarafından gösterildiği gibi, ifade yazılabilir konumların virgülle ayrılmış bir listesini belirleyebilir.
Bu, birden çok atamaolarak bilinir.
deyimi bir veya daha fazla virgülle ayrılmış değerin listesini gösterir. her iki işlenen listesindeki virgüller birden çok atama söz diziminin bir parçasıdır ve ikili virgül işlecini temsil
Değerleri (§8.1.2) olan deyimler için deyimi bir deyim olabilir.
Örnekler:
$a = 20; $b = $a + 12L # $b has type long, value 22
$hypot = [Math]::Sqrt(3*3 + 4*4) # type double, value 5
$a = $b = $c = 10.20D # all have type decimal, value 10.20
$a = (10,20,30),(1,2) # type [object[]], Length 2
[int]$x = 10.6 # type int, value 11
[long]$x = "0xabc" # type long, value 0xabc
$a = [float] # value type literal [float]
$i,$j,$k = 10,"red",$true # $i is 10, $j is "red", $k is True
$i,$j = 10,"red",$true # $i is 10, $j is [object[]], Length 2
$i,$j = (10,"red"),$true # $i is [object[]], Length 2, $j is True
$i,$j,$k = 10 # $i is 10, $j is $null, $k is $null
$h = @{}
[int] $h.Lower, [int] $h.Upper = -split "10 100"
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.Dept = "Finance" # adds element Finance
$h1["City"] = "New York" # adds element City
[int]$Variable:v = 123.456 # v takes on the value 123
${E:output.txt} = "a" # write text to the given file
$Env:MyPath = "x:\data\file.txt" # define the environment variable
$Function:F = { param ($a, $b) "Hello there, $a, $b" }
F 10 "red" # define and invoke a function
function Demo { "Hi there from inside Demo" }
$Alias:A = "Demo" # create alias for function Demo
A # invoke function Demo via the alias
7.11.2 Bileşik atama
Açıklama:
*=
için bkz. §7.6.1, §7.6.2, §7.6.3; /=
için bkz. §7.6.4; %=
için bkz. §7.6.5; +=
için bkz. §7.7.1, §7.7.2, §7.7.3; -=
için bkz. §7.7.5.
Not
Sayısal türdeki kısıtlanmamış bir değerin atandığı işlenenin türü, sonuç depolandığında atama işleci tarafından değiştirilebilir.
Örnekler:
$a = 1234; $a *= (3 + 2) # type is int, value is 1234 * (3 + 2)
$b = 10,20,30 # $b[1] has type int, value 20
$b[1] /= 6 # $b[1] has type double, value 3.33...
$i = 0
$b = 10,20,30
$b[++$i] += 2 # side effect evaluated only once
[int]$Variable:v = 10 # v takes on the value 10
$Variable:v -= 3 # 3 is subtracted from v
${E:output.txt} = "a" # write text to the given file
${E:output.txt} += "b" # append text to the file giving ab
${E:output.txt} *= 4 # replicate ab 4 times giving abababab
7.12 Yeniden yönlendirme işleçleri
Sözdizimi:
pipeline:
expression redirections~opt~ pipeline-tail~opt~
command verbatim-command-argument~opt~ pipeline-tail~opt~
redirections:
redirection
redirections redirection
redirection:
merging-redirection-operator
file-redirection-operator redirected-file-name
redirected-file-name:
command-argument
primary-expression
file-redirection-operator: one of
> >> 2> 2>> 3> 3>> 4> 4>>
5> 5>> 6> 6>> > >> <
merging-redirection-operator: one of
>&1 2>&1 3>&1 4>&1 5>&1 6>&1
>&2 1>&2 3>&2 4>&2 5>&2 6>&2
Açıklama:
yeniden yönlendirme operatörü >
, işlem hattının standart çıktısını alır ve redirected-file-nametarafından belirtilen konuma yönlendirerek bu konumun mevcut içeriğinin üzerine yazar.
yeniden yönlendirme işleci >>
, işlem hattından standart çıkışı alır ve yeniden yönlendirme dosya adıtarafından belirlenen konuma, varsa bu konumun mevcut içeriğine ekleyerek yönlendirir. Bu konum mevcut değilse oluşturulur.
form
form n>>
olan yeniden yönlendirme işleci, n akışlarının işlem hattından çıkan çıktılarını alır ve bunları, varsa mevcut içeriğine ekleyerek, tarafından belirlenenyeniden yönlendirilmiş-dosya-adı konumuna yönlendirir. O konum yoksa otomatik olarak oluşturulur.
form m>&n
şeklindeki yeniden yönlendirme operatörü, akış m çıktısını, akış nile aynı konuma yazar.
Geçerli akışlar şunlardır:
Akış | Açıklama |
---|---|
1 | Standart çıkış akışı |
2 | Hata çıkış akışı |
3 | Uyarı çıkış akışı |
4 | Detaylı çıkış akışı |
5 | Çıkış akışında hata ayıklama |
* | Standart çıkış, hata çıktısı, uyarı çıkışı, ayrıntılı çıkış ve hata ayıklama çıkış akışları |
Şunlar: 1>&2
, 6>
, 6>>
ve <
yönlendirme işleçleri gelecekte kullanılmak üzere ayrılmıştır.
Çıktıda , yönlendirilen dosya adı, $null
ise, çıktı atılır.
Normalde, üst düzey yan etkiye sahip bir ifadenin değeri, bu ifade bir parantez çifti içine alınmadığı sürece işlem hattına yazılmaz. Ancak, böyle bir ifade standart çıktıyı yönlendiren bir işlecin sol işleneniyse, değer yazılır.
Örnekler:
$i = 200 # pipeline gets nothing
$i # pipeline gets result
$i > output1.txt # result redirected to named file
++$i >> output1.txt # result appended to named file
type file1.txt 2> error1.txt # error output redirected to named file
type file2.txt 2>> error1.txt # error output appended to named file
dir -Verbose 4> verbose1.txt # verbose output redirected to named file
# Send all output to output2.txt
dir -Verbose -Debug -WarningAction Continue *> output2.txt
# error output redirected to named file, verbose output redirected
# to the same location as error output
dir -Verbose 4>&2 2> error2.txt
PowerShell