about_Operators

Kısa açıklama

PowerShell tarafından desteklenen işleçleri açıklar.

Uzun açıklama

İşleç, bir komut veya ifadede kullanabileceğiniz bir dil öğesidir. PowerShell, değerleri işlemenize yardımcı olmak için çeşitli işleç türlerini destekler.

Aritmetik İşleçler

Bir komut veya ifadedeki değerleri hesaplamak için aritmetik işleçleri (+, -, *, /, %) kullanın. Bu işleçlerle değerleri ekleyebilir, çıkarabilir, çarpabilir veya bölebilir ve bölme işleminin kalan kısmını (modül) hesaplayabilirsiniz.

Toplama işleci öğeleri birleştirir. Çarpma işleci, her öğenin belirtilen sayıda kopyasını döndürür. Aritmetik işleçleri, bunları uygulayan herhangi bir .NET türünde kullanabilirsiniz, örneğin: Int, String, DateTime, Hashtableve Diziler.

Bit düzeyinde işleçler (-band, -bor, -bxor, -bnot, -shl, ), -shrdeğerlerdeki bit desenlerini düzenler.

Daha fazla bilgi için bkz . about_Arithmetic_Operators.

Atama İşleçleri

Değişkenlere değer atamak, +=/=-=*=değiştirmek veya eklemek için atama işleçlerini (=, , %=) kullanın. Aritmetik işlemin sonucunu bir değişkene atamak için aritmetik işleçleri atamayla birleştirebilirsiniz.

Daha fazla bilgi için bkz . about_Assignment_Operators.

Karşılaştırma İşleçleri

Değerleri ve test koşullarını karşılaştırmak için karşılaştırma işleçlerini (-eq-ne-gt, , -lt, , -le, ) -gekullanın. Örneğin, eşit olup olmadıklarını belirlemek için iki dize değerini karşılaştırabilirsiniz.

Karşılaştırma işleçleri, metindeki desenleri bulayan veya değiştiren işleçleri de içerir. (-match, -notmatch, -replace) işleçleri normal ifadeler, (-like, -notlike) ise joker karakterler *kullanır.

Kapsama karşılaştırma işleçleri, bir test değerinin bir başvuru kümesinde (-in, -notin, , -notcontains-contains) görünüp görünmediğini belirler.

Tür karşılaştırma işleçleri (-is, -isnot) bir nesnenin belirli bir türe sahip olup olmadığını belirler.

Daha fazla bilgi için bkz . about_Comparison_Operators.

Mantıksal İşleçler

Koşullu deyimleri tek bir karmaşık koşulluya bağlamak için mantıksal işleçleri (-and, -xor-or, , -not, !) kullanın. Örneğin, mantıksal işleç -and kullanarak iki farklı koşula sahip bir nesne filtresi oluşturabilirsiniz.

Daha fazla bilgi için bkz . about_Logical_Operators.

Yeniden Yönlendirme İşleçleri

Bir komut veya ifadenin çıkışını bir metin dosyasına göndermek için yeniden yönlendirme işleçlerini (>>>2>, , , 2>>ve 2>&1) kullanın. Yeniden yönlendirme işleçleri cmdlet'i (parametresiz) gibi Out-File çalışır, ancak hata çıkışını belirtilen dosyalara yeniden yönlendirmenize de olanak sağlar. Çıktıyı yeniden yönlendirmek için cmdlet'ini Tee-Object de kullanabilirsiniz.

Daha fazla bilgi için bkz. about_Redirection

Bölme ve Birleştirme İşleçleri

-split ve -join işleçleri alt dizeleri böler ve birleştirir. -split işleci bir dizeyi alt dizelere böler. -join işleci birden çok dizeyi tek bir dizede birleştirir.

Daha fazla bilgi için bkz . about_Split ve about_Join.

Tür İşleçleri

Bir nesnenin .NET türünü bulmak veya değiştirmek için tür işleçlerini (-is, -isnot, -as) kullanın.

Daha fazla bilgi için bkz . about_Type_Operators.

Tekli İşleçler

Değerleri artırmak veya azaltmak ve -- olumsuzlama için birli ++ ve - işleçlerini kullanın. Örneğin, değişkenini $a 'den'e 9 artırmak için 10yazın $a++.

Daha fazla bilgi için bkz . about_Arithmetic_Operators.

Özel İşleçler

Özel işleçler, başka bir işleç grubuna sığmayan belirli kullanım örneklerine sahiptir. Örneğin, özel işleçler komutları çalıştırmanıza, bir değerin veri türünü değiştirmenize veya diziden öğe almanıza olanak sağlar.

Gruplandırma işleci ( )

Diğer dillerde olduğu gibi, (...) ifadelerde işleç önceliğini geçersiz kılmaya hizmet eder. Örneğin: (1 + 2) / 3

Ancak PowerShell'de ek davranışlar vardır.

Sonuç ifadelerini gruplandırma

(...)bir komuttan gelen çıkışın bir ifadeye katılmasına izin vermenizi sağlar. Örneğin:

PS> (Get-Item *.txt).Count -gt 10
True

Gruplandırılmış ifadeleri piping

İşlem hattının ilk kesimi olarak kullanıldığında, bir komutu veya ifadeyi parantez içinde kaydırmak, ifade sonucunun sabitlenmesine neden olur. Parantezler bir komutu sarmalarsa, sonuçlar işlem hattı üzerinden gönderilmeden önce bellekte toplanan tüm çıktılarla tamamlanacak şekilde çalıştırılır.

Bir ifadeyi borulamadan önce gruplandırmak, sonraki nesne nesne işlemenin komutun çıkışını üretmek için kullandığı numaralandırmayı engellememesini de sağlar.

Atama deyimlerini gruplandırma

Gruplandırılmamış atama deyimleri değerlerin çıkışını vermez. Atama deyimi gruplandırılırken, atanan değişkenin değeri geçirilir ve daha büyük ifadelerde kullanılabilir. Örneğin:

PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True

deyimini parantez içinde sarmalama, değerini $varveren bir ifadeye dönüştürür.

Bu davranış, gibi +=bileşik işleçler ve artım () ve azaltma (++--) işleçleri de dahil olmak üzere tüm atama işleçleri için geçerlidir. Ancak, artım ve azalma için işlem sırası, konumlarına bağlıdır.

PS> $i = 0
PS> (++$i) # prefix
1
PS> $i = 0
PS> ($i++) # postfix
0
PS> $i
1

Ön ek örneğinde değeri $i çıktı alınmadan önce artırılır. Sonek durumunda değeri çıktıdan $i sonra artırılır.

Bu tekniği, deyimi gibi if bir koşullu deyim bağlamında da kullanabilirsiniz.

if ($textFiles = Get-ChildItem *.txt) {
    $textFiles.Count
}

Bu örnekte, eşleşen dosya yoksa komut Get-ChildItem hiçbir şey döndürmez ve boole bağlamında kabul edilen $false öğesine hiçbir şey $textFilesatamaz. bir veya daha fazla FileInfo nesnesi atanmışsa $textFiles, koşullu olarak değerlendirilir $true. deyiminin gövdesindeki if değeriyle $textFiles çalışabilirsiniz.

Not

Bu teknik kullanışlı ve kısa olsa da, atama işleci () ile eşitlik karşılaştırma işleci (=-eq) arasında karışıklığa neden olabilir.

Alt ifade işleci $( )

Bir veya daha fazla deyimin sonucunu döndürür. Tek bir sonuç için bir skaler döndürür. Birden çok sonuç için bir dizi döndürür. Başka bir ifade içinde bir ifade kullanmak istediğinizde bunu kullanın. Örneğin, komutun sonuçlarını bir dize ifadesine eklemek için.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

Dizi alt ifade işleci @( )

Bir veya daha fazla deyimin sonucunu dizi olarak döndürür. Sonuç her zaman 0 veya daha fazla nesneden oluşan bir dizidir.

PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
0

Karma tablo değişmez değer söz dizimi @{}

Dizi alt ifadesine benzer şekilde, bu söz dizimi bir karma tablo bildirmek için kullanılır. Daha fazla bilgi için bkz . about_Hash_Tables.

Çağrı işleci &

Bir komut, betik veya betik bloğu çalıştırır. "Çağırma işleci" olarak da bilinen çağrı işleci, değişkenlerde depolanan ve dizeler veya betik bloklarıyla temsil edilen komutları çalıştırmanıza olanak tanır. Çağrı işleci bir alt kapsamda yürütülür. Kapsamlar hakkında daha fazla bilgi için bkz . about_Scopes.

Bu örnek, bir komutu bir dizede depolar ve çağrı işlecini kullanarak yürütür.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

Çağrı işleci dizeleri ayrıştırmaz. Başka bir deyişle, çağrı işlecini kullanırken dize içinde komut parametrelerini kullanamazsınız.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.

Invoke-Expression cmdlet'i, çağrı işlecini kullanırken ayrıştırma hatalarına neden olan kodu yürütebilir.

PS> & "1+1"
&: The term '1+1' is not recognized as a name of a cmdlet, function, script
file, or executable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.

PS> Invoke-Expression "1+1"
2

Bir betiği dosya adını kullanarak yürütebilirsiniz. Bir betik dosyasının yürütülebilir olması için bir .ps1 dosya uzantısı olmalıdır. Yollarında boşluk bulunan dosyalar tırnak içine alınmalıdır. Alıntılanan yolu yürütmeye çalışırsanız, PowerShell betiği çalıştırmak yerine tırnak içindekileri görüntüler. Çağrı işleci, dosya adını içeren dizenin içeriğini yürütmenize olanak tanır.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

Betik blokları hakkında daha fazla bilgi için bkz . about_Script_Blocks.

Arka plan işleci &

İşlem hattını arka planda, bir PowerShell işinde çalıştırır. Bu işleç, komutu altshell'de zaman uyumsuz olarak bir iş olarak çalıştırmadan önce çalıştıran UNIX denetim işleci ve işaretine ()& benzer şekilde davranır.

Bu işleç işlevsel olarak ile Start-Jobeşdeğerdir. Varsayılan olarak, arka plan işleci paralel görevleri başlatan çağıranın geçerli çalışma dizinindeki işleri başlatır. Aşağıdaki örnekte arka plan işi işlecinin temel kullanımı gösterilmektedir.

Get-Process -Name pwsh &

Bu komut işlevsel olarak aşağıdaki kullanımıyla eşdeğerdir Start-Job:

Start-Job -ScriptBlock {Get-Process -Name pwsh}

Aynı gibiStart-Job&, arka plan işleci de bir Job nesne döndürür. Bu nesne, işi başlatmak için kullandığınız Start-Job gibi ve Remove-Jobile Receive-Job kullanılabilir.

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

Arka & plan işleci aynı UNIX denetim işleci ve işareti (&) gibi bir deyim sonlandırıcısıdır. Bu, arka plan işlecinden & sonra ek komutları çağırmanıza olanak tanır. Aşağıdaki örnekte, arka plan işlecinden sonra ek komutların çağrılması & gösterilmektedir.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Bu, aşağıdaki betikle eşdeğerdir:

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

Her biri kendi arka plan işlemlerinde ama hepsi tek bir satırda olmak üzere birden çok komut çalıştırmak istiyorsanız, komutların her biri arasında ve sonrasına yerleştirmeniz & yeterlidir.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

PowerShell işleri hakkında daha fazla bilgi için bkz . about_Jobs.

Atama işleci [ ]

Nesneleri belirtilen türe dönüştürür veya sınırlar. Nesneler dönüştürülemezse PowerShell bir hata oluşturur.

[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'

Atama, bir değişken atama gösterimi kullanılarak atandığında da gerçekleştirilebilir.

Virgül işleci ,

İkili işleç olarak, virgül bir dizi oluşturur veya oluşturulan dizinin sonuna ekler. İfade modunda, birli işleç olarak virgül yalnızca bir üyeye sahip bir dizi oluşturur. Virgülleri üyenin önüne yerleştirin.

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Bağımsız Write-Output değişken beklediğinden, ifadeyi parantez içine koymanız gerekir.

Nokta kaynak oluşturma işleci .

Geçerli kapsamda bir betik çalıştırır, böylece betiğin oluşturduğu tüm işlevler, diğer adlar ve değişkenler geçerli kapsama eklenir ve mevcut olanlar geçersiz kılınabilir. Betik tarafından bildirilen parametreler değişkene dönüşür. Değer verilmeyen parametreler, değer içermeyen değişkenlere dönüşür. Ancak, otomatik değişken $args korunur.

. c:\scripts\sample.ps1 1 2 -Also:3

Not

Nokta kaynak işlecini bir boşluk izler. Boşluğu, geçerli dizini temsil eden nokta (.) simgesinden ayırmak için kullanın.

Aşağıdaki örnekte, geçerli dizindeki Sample.ps1 betiği geçerli kapsamda çalıştırılır.

. .\sample.ps1

Biçim işleci -f

Dize nesnelerinin biçim yöntemini kullanarak dizeleri biçimlendirin. İşlecin sol tarafındaki biçim dizesini ve işlecin sağ tarafında biçimlendirilecek nesneleri girin.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

"0" özel tanımlayıcısı ile sayısal bir değeri sıfırlayabilirsiniz. öğesini izleyen : sıfır sayısı, biçimlendirilmiş dizenin doldurulacak maksimum genişliği belirtir.

"{0:00} {1:000} {2:000000}" -f 7, 24, 365
07 024 000365

Küme ayraçlarını ({}) biçimlendirilmiş dizede tutmanız gerekiyorsa, küme ayraçlarını ikiye katlayarak bunlardan kaçabilirsiniz.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

Daha fazla bilgi için bkz . String.Format yöntemi ve Bileşik Biçimlendirme.

Dizin işleci [ ]

Dizine alınan koleksiyonlardan diziler ve karma tablolar gibi nesneleri seçer. Dizi dizinleri sıfır tabanlıdır, bu nedenle ilk nesne olarak [0]dizinlenir. Son değerleri almak için negatif dizinler de kullanabilirsiniz. Karma tablolar anahtar değerine göre dizinlenir.

Dizinlerin listesi verüldüğünde, dizin işleci bu dizinlere karşılık gelen üyelerin listesini döndürür.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

Bir nesne dizine alınan bir koleksiyon olmadığında, ilk öğeye erişmek için dizin işlecini kullanmak nesnenin kendisini döndürür. İlk öğenin dışındaki dizin değerleri döndürür $null.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

İşlem hattı işleci |

Kendisinden önceki komutun çıkışını ("kanallar") izleyen komuta gönderir. Çıkış birden fazla nesne ("koleksiyon") içerdiğinde işlem hattı işleci nesneleri birer birer gönderir.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

İşlem hattı zinciri işleçleri && ve ||

Sol taraftaki işlem hattının başarısına bağlı olarak sağ taraftaki işlem hattını koşullu olarak yürütebilirsiniz.

# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules

Daha fazla bilgi için bkz . About_Pipeline_Chain_Operators.

Aralık işleci ..

Aralık işleci, sıralı tamsayı veya karakter dizisini temsil etmek için kullanılabilir. Aralık işleci tarafından birleştirilen değerler, aralığın başlangıç ve bitiş değerlerini tanımlar.

Not

PowerShell 6'da karakter aralıkları desteği eklendi.

Sayı aralıkları

1..10
$max = 10
foreach ($a in 1..$max) {Write-Host $a}

Aralıkları ters sırada da oluşturabilirsiniz.

10..1
5..-5 | ForEach-Object {Write-Output $_}

Aralığın başlangıç ve bitiş değerleri, bir tamsayı veya karakter olarak değerlendirilen herhangi bir ifade çifti olabilir. Aralığın uç noktaları, imzalı 32 bit tamsayılara ([int32] ) dönüştürülebilir olmalıdır. Daha büyük değerler hataya neden olur. Ayrıca, aralık bir dizide yakalanırsa, sonuçta elde edilen dizinin boyutu ile [int]::MaxValue - 56sınırlıdır. Bu, .NET'teki bir dizinin en büyük boyutudur.

Örneğin, başlangıç ve bitiş değerleriniz için bir sabit listesi üyelerini kullanabilirsiniz.

PS> enum Food {
      Apple
      Banana = 3
      Kiwi = 10
    }
PS> [Food]::Apple..[Food]::Kiwi
0
1
2
3
4
5
6
7
8
9
10

Önemli

Sonuçta elde edilen aralık, sabit listesi değerleriyle sınırlı değildir. Bunun yerine, sağlanan iki değer arasındaki değer aralığını temsil eder. Bir numaralandırmanın üyelerini güvenilir bir şekilde temsil etmek için aralık işlecini kullanamazsınız.

Karakter aralıkları

Karakter aralığı oluşturmak için karakterleri tırnak içine alın.

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

Bir dizeye karakter aralığı atarsanız, dizeye karakter dizisi atama aynı şekilde değerlendirilir.

PS> [string]$s = 'a'..'e'
$s
a b c d e
$a = 'a', 'b', 'c', 'd', 'e'
$a
a b c d e

Dizideki karakterler bir dizeye katılır. Karakterler tercih değişkeninin değeriyle $OFS ayrılır. Daha fazla bilgi için bkz . about_Preference_Variables.

Dizideki karakterlerin sırası, karakterin ASCII değeri tarafından belirlenir. Örneğin, ve X ASCII değerleri c sırasıyla 99 ve 88'tir. Bu aralık ters sırada gösterilir.

PS> 'c'..'X'
c
b
a
`
_
^
]
\
[
Z
Y
X

Üye erişim işleci .

Bir nesnenin özelliklerine ve yöntemlerine erişir. Üye adı bir ifade olabilir.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

PowerShell 3.0'dan başlayarak, üyesi olmayan bir liste koleksiyonu nesnesinde işlecini kullandığınızda, PowerShell bu koleksiyondaki öğeleri otomatik olarak numaralandırır ve her birinde işlecini kullanır. Daha fazla bilgi için bkz . about_Member-Access_Enumeration.

Statik üye işleci ::

.NET sınıfının statik özelliklerini ve yöntemlerini çağırır. Bir nesnenin statik özelliklerini ve yöntemlerini bulmak için cmdlet'in Static parametresini Get-Member kullanın. Üye adı bir ifade olabilir.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

Üçüncül işleç ? <if-true> : <if-false>

Basit koşullu durumlarda deyiminin yerine if-else üçüncül işlecini kullanabilirsiniz.

Daha fazla bilgi için bkz . about_If.

Null birleşim işleci ??

Null birleşim işleci ?? , null değilse sol tarafındaki işlenenin değerini döndürür. Aksi takdirde sağ işleneni değerlendirir ve sonucunu döndürür. ?? Sol işlenen null olmayan olarak değerlendirilirse işleç sağ işlenenini değerlendirmez.

$x = $null
$x ?? 100
100

Aşağıdaki örnekte sağ işlenen değerlendirilmez.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Null birleşim atama işleci ??=

Null birleşim atama işleci ??= , sağ işleneninin değerini yalnızca soldaki işlenen null olarak değerlendirilirse sol işlenenine atar. ??= Sol işlenen null olmayan olarak değerlendirilirse işleç sağ işlenenini değerlendirmez.

$x = $null
$x ??= 100
$x
100

Aşağıdaki örnekte sağ işlenen değerlendirilmez.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
$todaysDate
1/10/2020

Null koşullu işleçler ?. ve ?[]

Not

Bu özellik PowerShell 7.1'de deneyselden temele taşındı.

Null koşullu işleç, bir üye erişimi, ?.veya öğe erişimi, ?[], işlemini yalnızca işlenen null olmayan olarak değerlendirirse, işlecine uygular; aksi takdirde null döndürür.

PowerShell değişken adının bir parçası olmasını sağladığından ? , bu işleçleri kullanmak için değişken adının resmi belirtimi gerekir. veya değişken adının ${a?}bir parçası olduğunda ? gibi ${a} değişken adlarının çevresinde ayraçlar ({}) kullanmanız gerekir.

Not

değişken adı söz dizimi ${<name>} , alt ifade işleciyle $() karıştırılmamalıdır. Daha fazla bilgi için about_Variables değişken adı bölümüne bakın.

Aşağıdaki örnekte PropName değeri döndürülür.

$a = @{ PropName = 100 }
${a}?.PropName
100

Aşağıdaki örnek, PropName üye adına erişmeye çalışmadan null döndürür.

$a = $null
${a}?.PropName

Bu örnekte, dizine alınan öğenin değeri döndürülür.

$a = 1..10
${a}?[0]
1

Aşağıdaki örnek, dizine alınan öğeye erişmeye çalışmadan null döndürür.

$a = $null
${a}?[0]

Ayrıca bkz.