Aracılığıyla paylaş


about_Quoting_Rules

Kısa açıklama

PowerShell'de tek ve çift tırnak işaretlerini kullanma kurallarını açıklar.

Uzun açıklama

Ayrıştırma sırasında PowerShell ilk olarak girişi bir ifade olarak yorumlamaya bakar. Ancak bir komut çağrısıyla karşılaşıldığında ayrıştırma bağımsız değişken modunda devam eder. Tırnak işaretleri olmayan sayısal olmayan bağımsız değişkenler dize olarak değerlendirilir. Yollar gibi boşluklar içeren bağımsız değişkenleriniz varsa, bu bağımsız değişken değerlerini tırnak içine almanız gerekir. Bağımsız değişken ayrıştırma hakkında daha fazla bilgi için about_Parsing Bağımsız Değişken modu bölümüne bakın.

Değişmez değer dizesi belirtmek için tırnak işaretleri kullanılır. Bir dizeyi tek tırnak içine (') veya çift tırnak işareti (" ) içine alabilirsiniz.

Tırnak işaretleri, here-string oluşturmak için de kullanılır. Buradaki dize, tırnak işaretlerinin tam anlamıyla yorumlandığı tek tırnaklı veya çift tırnaklı bir dizedir. Bir here-string birden çok satıra yayılabilir. Bir here-string içindeki tüm satırlar, tırnak içine alınmamış olsalar bile dize olarak yorumlanır.

Uzak bilgisayarlara yönelik komutlarda tırnak işaretleri, komutun uzak bilgisayarda çalıştırılacak bölümlerini tanımlar. Uzak oturumda tırnak işaretleri, komuttaki değişkenlerin önce yerel bilgisayarda mı yoksa uzak bilgisayarda mı yorumlanıp yorumlanmayacağını da belirler.

Not

PowerShell, tipografik veya kıvrımlı tırnaklar olarak da adlandırılan akıllı tırnak işaretlerini dizeler için normal tırnak işaretleri olarak kabul eder. Dizeleri içine almak için akıllı tırnak işaretleri kullanmayın. Akıllı tırnak işaretleri içeren dizeler yazarken, bu belgenin Dizeye tırnak karakterleri ekleme bölümündeki yönergeleri izleyin. Akıllı tırnak işaretleri hakkında daha fazla bilgi için İngilizce tırnak işaretleri Wikipedia makalesinin Akıllı Tırnaklar bölümüne bakın.

Çift tırnak içine alınmış dizeler

Çift tırnak içine alınmış bir dize, genişletilebilir bir dizedir. Dolar işaretinden ($) önce gelen değişken adları, dize işlenmek üzere komuta geçirilmeden önce değişkenin değeriyle değiştirilir.

Örneğin:

$i = 5
"The value of $i is $i."

Bu komutun çıktısı:

The value of 5 is 5.

Ayrıca, çift tırnaklı bir dizede ifadeler değerlendirilir ve sonuç dizeye eklenir. Örneğin:

"The value of $(2+3) is 5."

Bu komutun çıktısı:

The value of 5 is 5.

Genişletilebilir bir dizeye doğrudan yalnızca temel değişken başvuruları eklenebilir. Dizi dizini oluşturma veya üye erişimi kullanan değişkenler başvuruları bir alt ifade içine alınmalıdır. Örneğin:

"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.4.5

Bir değişken adını dizedeki sonraki karakterlerden ayırmak için, bunu ayraç içine alın ({}). Bu, özellikle değişken adının ardından iki nokta üst üste (: ) gelirse önemlidir. PowerShell, ile bir kapsam tanımlayıcısı : arasındaki $ her şeyi dikkate alır ve genellikle yorumlamanın başarısız olmasına neden olur. Örneğin, "$HOME: where the heart is." bir hata oluşturur, ancak "${HOME}: where the heart is." istenen şekilde çalışır.

Çift tırnaklı bir dizedeki değişken değerinin değiştirilmesini önlemek için, PowerShell kaçış karakteri olan backtick karakterini ()` kullanın.

Aşağıdaki örnekte, ilk $i değişkenin önündeki backtick karakteri PowerShell'in değişken adını değeriyle değiştirmesini engeller. Örneğin:

$i = 5
"The value of `$i is $i."

Bu komutun çıktısı:

The value of $i is 5.

Tek tırnaklı dizeler

Tek tırnak içine alınmış bir dize, ayrıntılı bir dizedir. Dize, siz yazarken komutuna geçirilir. Değiştirme işlemi yapılmaz. Örneğin:

$i = 5
'The value of $i is $i.'

Bu komutun çıktısı:

The value $i is $i.

Benzer şekilde, tek tırnaklı dizelerdeki ifadeler değerlendirilmez. Bunlar dize değişmez değerleri olarak yorumlanır. Örneğin:

'The value of $(2+3) is 5.'

Bu komutun çıktısı:

The value of $(2+3) is 5.

Dizeye tırnak karakterleri ekleme

Çift tırnak işaretlerinin bir dizede görünmesini sağlamak için, dizenin tamamını tek tırnak içine alın. Örneğin:

'As they say, "live and learn."'

Bu komutun çıktısı:

As they say, "live and learn."

Tek tırnaklı bir dizeyi çift tırnaklı bir dizeye de kapatabilirsiniz. Örneğin:

"As they say, 'live and learn.'"

Bu komutun çıktısı:

As they say, 'live and learn.'

Ya da çift tırnaklı tümceciği çift tırnak içine alın. Örneğin:

"As they say, ""live and learn."""

Bu komutun çıktısı:

As they say, "live and learn."

Tek tırnaklı bir dizeye tek tırnak işareti eklemek için ikinci bir ardışık tek tırnak kullanın. Örneğin:

'don''t'

Bu komutun çıktısı:

don't

PowerShell'i çift tırnak işaretini tam anlamıyla yorumlamaya zorlamak için bir ters köşe karakteri kullanın. Bu, PowerShell'in tırnak işaretini dize sınırlayıcısı olarak yorumlamasını engeller. Örneğin:

"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'

Tek tırnaklı dizelerin içeriği tam anlamıyla yorumlandığından, backtick karakteri değişmez karakter olarak kabul edilir ve çıktıda görüntülenir.

Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.

PowerShell, , , ve gibi akıllı tırnak işaretlerini normal tırnak işaretleri olarak yorumladığı için akıllı tırnak işaretlerinden de kaçınılması gerekir. Örneğin:

"Double ““smart quotation marks`” must be escaped in a double-quoted string."
'Single ‘‘smart quotation marks’’ must be escaped in a single-quoted string.'
Double “smart quotation marks” must be escaped in a double-quoted string.
Single ‘smart quotation marks’ must be escaped in a single-quoted string.

Here-strings

Buradaki dizeler için tırnak kuralları biraz farklıdır.

Here-string, işaretlerle (@ ) çevrili tek tırnaklı veya çift tırnaklı bir dizedir. Bir here-string içindeki tırnak işaretleri kelimenin tam anlamıyla yorumlanır.

Bir here-string:

  • birden çok satıra yayma
  • açılış işareti ve ardından yeni bir satırla başlar
  • yeni bir satır ve ardından kapanış işaretiyle biter
  • tek bir dizenin parçası olarak açma ve kapatma işaretleri arasındaki her satırı içerir

Normal dizeler gibi değişkenler de çift tırnaklı here-string'lerdeki değerleriyle değiştirilir. Tek tırnaklı here-string'lerde değişkenler değerleriyle değiştirilmez.

Herhangi bir metin için here-strings kullanabilirsiniz, ancak bunlar özellikle aşağıdaki metin türleri için kullanışlıdır:

  • Değişmez değer tırnak işaretleri içeren metin
  • HTML veya XML bloğundaki metin gibi birden çok metin satırı
  • Betik veya işlev belgesi için Yardım metni

Buradaki dize, ENTER tuşuna bastığınızda eklenen satır beslemesini veya yeni satır gizli karakterini temsil eden aşağıdaki biçimlerden <Enter> birini içerebilir.

Çift tırnak:

@"<Enter>
<string> [string] ...<Enter>
"@

Tek tırnaklar:

@'<Enter>
<string> [string] ...<Enter>
'@

Not

Son yeni satır karakteri, kapanış işaretinin bir parçasıdır. Here-string'e eklenmez.

Bir here-string, açma ve kapatma işaretleri arasındaki tüm metni içerir. Buradaki dizede, tüm tırnak işaretleri tam anlamıyla yorumlanır. Örneğin:

@"
For help, type "get-help"
"@

Bu komutun çıktısı:

For help, type "get-help"

Bir here-string kullanmak, komutta dize kullanmayı basitleştirebilir. Örneğin:

@"
Use a quotation mark, like ' or ", to begin a string.
"@

Bu komutun çıktısı:

Use a quotation mark, like ' or ", to begin a string.

Tek tırnaklı buradaki dizelerde değişkenler tam anlamıyla yorumlanır ve tam olarak yeniden oluşturulur. Örneğin:

@'
The $profile variable contains the path
of your PowerShell profile.
'@

Bu komutun çıktısı:

The $profile variable contains the path
of your PowerShell profile.

Çift tırnaklı here-string'lerde değişkenler değerleriyle değiştirilir. Örneğin:

@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@

Bu komutun çıktısı:

Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

Here-strings genellikle bir değişkene birden çok satır atamak için kullanılır. Örneğin, aşağıdaki buradaki dize $page değişkenine bir XML sayfası atar.

$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
        <command:name>
               Format-Table
        </command:name>
        <maml:description>
            <maml:para>Formats the output as a table.</maml:para>
        </maml:description>
        <command:verb>format</command:verb>
        <command:noun>table</command:noun>
        <dev:version></dev:version>
</command:details>
...
</command:command>
"@

Here-strings, cmdlet'ine ConvertFrom-StringData giriş için de kullanışlı bir biçimdir ve bu da buradaki dizeleri karma tablolara dönüştürür. Daha fazla bilgi için bkz. ConvertFrom-StringData.

Not

PowerShell, çift veya tek tırnaklı dizelerin, buradaki dizelerin söz dizimini kullanmadan @ birden çok satıra yayılmasına olanak tanır. Ancak, tam burada dize söz dizimi tercih edilen kullanımdır.

Genişletilebilir dizelerin yorumlanması

Genişletilmiş dizeler konsolda gördüğünüz varsayılan çıkışla aynı görünmeyebilir.

Diziler de dahil olmak üzere koleksiyonlar, öğelerin dize gösterimleri arasına tek bir boşluk yerleştirilerek dizelere dönüştürülür. Tercih değişkeni $OFSayarlanarak farklı bir ayırıcı belirtilebilir. Daha fazla bilgi için tercih değişkenine $OFSbakın.

Başka herhangi bir türün örnekleri, anlamlı bir gösterim vermeyebilir yöntemi çağrılarak ToString() dizelere dönüştürülür. Örneğin:

"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable

Konsolundakiyle aynı çıkışı elde etmek için, öğesine kanal Out-Stringoluşturduğunuz bir alt ifade kullanın. Baştaki Trim() ve sondaki boş satırları kaldırmak istiyorsanız yöntemini uygulayın.

"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name                           Value
----                           -----
key                            value

Kültür ayarları dize yorumlamayı etkiler

Yöntemler, ToString() değerleri dizelere dönüştürmek için geçerli yapılandırılmış kültür ayarlarını kullanır. Örneğin, aşağıdaki PowerShell oturumunun kültürü olarak de-DEayarlanır. ToString() yöntemi değerini $x bir dizeye dönüştürdüğünde ondalık ayırıcısı için virgül (,) kullanır. Ayrıca yöntemi, ToString() Almanca yerel ayar ayarları için uygun biçimi kullanarak tarihi bir dizeye dönüştürür.

PS> Get-Culture

LCID             Name             DisplayName
----             ----             -----------
1031             de-DE            German (Germany)

PS> $x = 1.2
PS> $x.ToString()
1,2

PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00

Ancak PowerShell, genişletilebilir dize ifadelerini yorumlarken sabit kültürü kullanır.

PS? "$x"
1.2

PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00

Alıntılanan dizeleri dış komutlara geçirme

Bazı yerel komutlar, tırnak karakterleri içeren bağımsız değişkenler bekler. PowerShell, dış komuta geçirmeden önce alıntılanan dizeyi yorumlar. Bu yorum dış tırnak karakterlerini kaldırır.

Bu davranış hakkında daha fazla bilgi için about_Parsing makalesine bakın.

Ayrıca bkz.