Powershell'de “@” sembolü ne işe yarar?


112

Dizileri başlatmak için PowerShell'de kullanılan @ sembolünü gördüm. @ Sembolü tam olarak neyi ifade eder ve bunun hakkında daha fazla bilgiyi nerede okuyabilirim?

Yanıtlar:


82

PowerShell aslında virgülle ayrılmış herhangi bir listeyi bir dizi olarak ele alır:

"server1","server2"

Dolayısıyla @ bu durumlarda isteğe bağlıdır. Bununla birlikte, ilişkilendirilebilir diziler için @ gereklidir:

@{"Key"="Value";"Key2"="Value2"}

Resmi olarak @, "dizi operatörü" dür. PowerShell ile birlikte yüklenen belgelerde veya birlikte yazdığım "Windows PowerShell: TFM" gibi bir kitapta daha fazla bilgi edinebilirsiniz.


12
Aşağıdaki Jeffrey Snover'ın cevabını kontrol ettiğinizden emin olun ... @ bir dizi tanımlayıcıdan daha fazlasıdır.
Eric Schoonover

115

PowerShell V2'de @ aynı zamanda Splat operatörüdür .

PS> # First use it to create a hashtable of parameters:
PS> $params = @{path = "c:\temp"; Recurse= $true}
PS> # Then use it to SPLAT the parameters - which is to say to expand a hash table 
PS> # into a set of command line parameters.
PS> dir @params
PS> # That was the equivalent of:
PS> dir -Path c:\temp -Recurse:$true

1
Aradığım şey buydu: bu işleç, Azure Kaynak Grubu dağıtım betiklerinde uyarlama bağlamında kullanılıyor.
Alex Marshall

57

Yukarıdaki yanıtlar yanıtın çoğunu sağlarken - soruya bu kadar geç olsa bile - tam yanıtı sağlamak, zekice:

Dizi alt ifadesi (bkz. About_diziler )

Tekil veya boş olsa bile değeri bir dizi olmaya zorlar, ör. $a = @(ps | where name -like 'foo')

Hash başlatıcı (see about_hash_tables )

Anahtar / değer çiftleriyle bir karma tabloyu başlatır, ör. $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Sıçratma (bkz. About_splatting )

Tek tek numaralandırılmış daha alışılmış parametreler yerine, bir diziden veya karma tablodan parametrelerle bir cmdlet çağıralım, örneğin hemen yukarıdaki karma tabloyu kullanarak, Copy-Item @HashArguments

Burada dizeler ( about_quoting_rules'e bakın )

Genellikle çok satırlı dizeler için kullanılan, kolayca katıştırılmış tırnak işaretleriyle dizeler oluşturalım, örneğin:

$data = @"
line one
line two
something "quoted" here
"@

Bu tür sorular ( PowerShell'de 'x' gösterimi ne anlama geliyor? ) Burada StackOverflow'da ve birçok okuyucu yorumunda çok yaygın olduğu için, Simple-Talk.com'da yayınlanan bir PowerShell noktalama sözlüğü oluşturdum. @,% Ve # ve $ _ ile ilgili her şeyi okuyun ve? ve daha fazlası The Complete Guide to PowerShell Punctuation'da . Makaleye ekli, size her şeyi tek bir sayfada veren bu duvar çizelgesidir: görüntü açıklamasını buraya girin


@ 'Nin tüm kullanımları için çok kapsamlı bir yürüyüş. Buraya ipi aramaya geldim. Teşekkür ederim!
Nixphoe

27

Ayrıca, @()geri aldığınız şeyin tek bir öğe yerine bir dizi olduğundan emin olmak için bir cmdlet'in (veya ardışık düzeninin ) çıktısını da sarabilirsiniz .

Örneğin, dir genellikle bir liste döndürür, ancak seçeneklere bağlı olarak tek bir nesne döndürebilir. Bir foreach nesnesi ile sonuçları yinelemeyi planlıyorsanız, bir listeyi geri aldığınızdan emin olmanız gerekir. İşte uydurma bir örnek:

$results = @( dir c:\autoexec.bat)

Bir şey daha var ... boş bir dizi (bir değişkeni başlatmak gibi) belirtilir @().


[dizi] $ a sözdizimi görsel olarak biraz daha net ama iyi bir ipucu.
Don Jones

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.