Aracılığıyla paylaş


7. İfadeler

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 + --$ive $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 $xdeğişkenidir. Ancak üçüncü durumda, ifade bir cmdlet'ine doğrudan çağrıdır, bu nedenle sonuç numaralandırılmaz ve $aint[3] ve intolmak ü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ı bir alt ifadeyi temsil eder gruplandırma parantezleri değildir ve üst düzey ifade bir yan etki işleci içerdiğinden, ifadenin değeri işlem hattına yazılmaz. Elbette, > 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-nametarafı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-nameve 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.

birincil ifade A1 boyutlu bir dizi belirlediğinde, işleç , ifade değeri dönüştürüldükten sonra konumunda bulunan öğeyi döndürür. Sonuç, alt indislenen dizinin öğe türüne sahiptir. ifade negatifse, A[expression]A[A.Length + expression]konumunda bulunan öğesini belirler.

birincil ifade B2 boyutlu bir dizi belirlediğinde, işleç satır değeri ve sütun ifade bileşenleri (virgülle ayrılmış liste olarak belirtilir) dönüştürüldükten sonra konumunda bulunan öğeyi döndürür. Sonuç, alt indislenen dizinin öğe türüne sahiptir. 1 boyutlu bir diziden farklı olarak, negatif konumların özel bir anlamı yoktur.

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ç $nullolur. 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, $a3 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ç $nullolur. 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:

birincil ifade bir karma tablo belirlediğinde, işleci,ifadesi tarafından belirtilen anahtarlarla ilişkili değer veya değerleri döndürür. ifadesinin türü kısıtlanmaz.

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ç $nullolur. 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:

birincil ifade xml türünde bir nesne belirttiğinde, ifade gerekirse dizeye dönüştürülür ve işleciifadesi tarafından belirtilen ada sahip ilk alt öğeyi döndürür. ifadesinin türü dize olmalıdır. Sonucun türü uygulama tanımlıdır. Sonuç, ilk alt elemanını döndürmek için indekslenebilir şekilde kullanılabilir. ifadesiile belirtilen isimde bir alt öğe yoksa, sonuç $nullolur. 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

birincil ifade numaralandırılabilir (§4) veya Karma Tablo türünde bir nesne belirlediğinde ve ifade 1 boyutlu bir dizi olduğunda, sonuçifadesi öğeleri tarafından belirlenen birincil ifade öğelerini içeren bir dizi dilimidir (§9.9).

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 $nullolur. $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 $nulldeğerine sahip olmalıdır. İşleç tarafından belirlenen değer $nullise, 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 tarafından belirlenen değerin türü, sonuç depolandığında değişebilir. Atama yoluyla tür değişikliği hakkında bir tartışma için bkz. §7.11.

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ç $nullolur. 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ç $nullolur. 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, $nulldahil 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 $h2olmak üzere iki Karma Tablo ve boş olan üçüncü bir $h3oluş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, -notiç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 $nulldeğerine sahip yazılabilir bir konumu belirtmelidir. unary ifade tarafından belirlenen değer $nullise, 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 tarafından belirlenen değerin türü, sonuç depolandığında değişebilir. Atama yoluyla tür değişikliği hakkında bir tartışma için bkz. §7.11.

Ö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 işleci, tekli ifadetarafından belirlenen bir veya daha fazla nesnenin değerinin birleştirilmiş hali olan bir dize oluşturur. (Ayırıcı, bu işlecin ikili sürümü kullanılarak eklenebilir (§7.8.4.4).)

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 1uzunluğ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,8kullanı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 ]}

N aralık-ifade değer konumunu (gerekli) , M (isteğe bağlı) en düşük görüntüleme genişliğini temsil eder ve FormatString (isteğe bağlı) biçimi gösterir. Biçimlendirilmiş bir değerin genişliği belirtilen genişliği aşarsa, genişlik buna göre artırılır. FormatString içinde konumları belirtilmeyen değerler, olası yan etkiler değerlendirdikten sonra göz ardı edilir. N var olmayan bir konuma başvuruyorsa, davranış uygulama tanımlıdır. $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ü boololur. 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 -notcontainsile değer sağ işlenen tarafından, dizi ise sol işlenen tarafından belirlenir. -in ve -notinile 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ü boololur. 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ç $trueise, 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 SimpleMatchseçenek adını içeriyorsa IgnoreCaseseçenek adını da içerebilir. Seçenekler dizesi RegexMatch seçenek adını içeriyorsa veya RegexMatch veya SimpleMatchiçermiyorsa, SimpleMatchdışında herhangi bir seçenek adı içerebilir. Ancak, hem Çok Satırlı hem de Tek Satırlıiçermemelidir.

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, -notmatchve -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.

-replacesöz konusu olduğunda, değiştirilen metin $nformun adları aracılığıyla alt dizinlere erişebilir; burada ilk eşleşme $1, ikincisi $3vb. 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, m2ve m3adlı üç 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 -borve 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ü boololur. Sol operand Yanlış olarak değerlendirilirse sağ operand değerlendirilmez.

Mantıksal OR işleci -or, işlenenleri tarafından belirlenen değerleri gerekirse booldeğ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 booltü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ü boololur.

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ğeriifadesi tarafından belirlenen yazılabilir konumda depolar. atama işleci= ü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, ifade Bir Hashtable'da varolmayan bir anahtar belirlerse, bu anahtardeyimi tarafından belirlenen değerin ilişkili değeriyle Hashtable'a eklenir.

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ğerler, deyimi tarafından belirlenen listedenalfabetik sırayla alınır veifadesi tarafından belirlenen karşılık gelen yazılabilir konumda saklanır. deyimi tarafından belirlenen listede yazılabilir konumlar ifadeden daha az değer varsa, fazla konumlar değerini alır. deyimi tarafından belirlenen listede yazılabilir konumlar ifadeden daha fazla değer varsa, en doğru ifade konumu dışında tümü karşılık gelen deyimi değerini alır ve en doğru ifade konum, kalan tüm deyimi değerleri öğe olarak içeren kısıtlanmamış bir 1 boyutlu diziye dönüşür.

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:

bileşik atama formu vardır ve bileşik atama örneğinde E1 ifadesinin yalnızca bir kez değerlendirilmesinin dışında basit atama ifadesiyle eşdeğerdir. 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ü optarafından belirlenir. *=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 biçimindeki yönlendirme işleci, işlem hattındaki ve akışının çıktısını alır ve bu çıktıyı,yeniden yönlendirilen-dosya-adı tarafından belirtilen konuma, mevcut içeriğin üzerine yazarak yönlendirir.

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ı, $nullise, çı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