Aracılığıyla paylaş


Betik oluşturma dilleri arasındaki farkları alıntılama

Azure CLI komutlarıyla çalışırken, betik dilinizin tırnak işaretlerini ve kaçış karakterlerini nasıl kullandığını unutmayın. Farklı kabuklarda kullanılan betikleri destekliyorsanız, farklılıkların alıntılanması değerli geliştirme saatlerinden tasarruf etmenizi sağlar.

Tek veya çift tırnak veya kaçış karakteri içeren parametre değerleriyle tahmin edilmeyen sonuçlardan kaçınmak için birkaç öneri aşağıdadır:

Boşluklar ve tırnak işaretleri

  • Boşluk içeren bir parametre değeri sağlarsanız, değeri tırnak içine alın.

  • Bash ve PowerShell'de değişken değeriniz tek tırnak işaretleri içeriyorsa, değeri çift tırnak içine alın ve tam tersi de geçerlidir.

  • Bash'te, kaçış olan çift tırnak işaretleri dizenin bir parçası olarak değerlendirilir.

  • Windows Komut İstemi'nde, değişken değerleri içindeki tırnak işaretleri değerin bir parçası olarak değerlendirilir.

İşte birkaç örnek:

# Correct
myVariable="my string ' ' wrapped in double quotes"
myVariable='my string " " wrapped in single quotes'
myVariable="my string with escaped \" \" double quotes wrapped in double quotes"

# Wrong, escaped single quotes in Bash are not treated as part of the string
myVariable='my value with escaped \' \' single quotes wrapped in single quotes'

# after each example ...
echo $myVariable

Doğru örnekler için Bash çıkışı aşağıdaki gibidir:

my string ' ' wrapped in double quotes
my string " " wrapped in single quotes
my string with escaped " " double quotes wrapped in double quotes

Alıntıların çıkışa eklenmesini istiyorsanız, değişkenden şu şekilde kurtulabilirsiniz: echo \"$myVariable\".

echo \"$myVariable\"
"my string ' ' wrapped in double quotes"

echo \'$myVariable\'
'my string " " wrapped in single quotes'

echo \"$myVariable\"
"my string with escaped " " double quotes wrapped in double quotes"

JSON dizeleri

  • Bir JSON dizesinin içindeki içeriği korumak için tek tırnak işareti kullanın. Satır içi JSON değerleri sağlanırken tek tırnak işareti gerekir. Örneğin, bu JSON hem Bash hem de PowerShell'de doğrudur: '{"key": "value"}'.

  • Komutunuz bir Windows Komut İstemi'nde çalışıyorsa, çift tırnak kullanmanız gerekir. yukarıdaki JSON dizesinin Cmd.exe eşdeğeridir "{"key":"value"}" .

  • JSON değeri çift tırnak içeriyorsa, bunları kaçış gerekir.

  • JSON parametre değerleriyle çalışırken Azure CLI'nın @<file> kuralını kullanmayı ve kabuğun yorumlama mekanizmalarını atlamayı göz önünde bulundurun.

    az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
    

Bash, PowerShell ve Cmd için kabul edilen JSON biçim desenleri şunlardır:

Testler arasındaki konsol çıkışını kaldırmak için Bash'in clear komutunu kullanın.

# Correct in Bash
az '{"key":"value"}' --debug
>> Command arguments: ['{"key":"value"}', '--debug']

az "{\"key\":\"value\"}" --debug
>> Command arguments: ['{"key":"value"}', '--debug']

Tırnak işaretleri ve boşluklar Bash tarafından yorumlandığından sonraki iki örnek yanlıştır .

Yanlış biçim Sorun Konsol çıktısı
az {"key":"value"} --debug Eksik tek tırnak işaretleri veya kaçış karakterleri Komut bağımsız değişkenleri: ['{key:value}', '--debug']
az {"key": "value"} --debug Tek tırnak işaretleri veya kaçış karakterleri eksik ve fazladan boşluk içeriyor Komut bağımsız değişkenleri: ['{key:', 'value}', '--debug']

Boş dizeler

  • PowerShell'de, değeriniz boş bir tırnak dizesi ()'' ise kullanın '""'.

  • Bash veya PowerShell'de, değeriniz boş bir tırnak dizesi ()'' ise kullanın "''".

    # Correct in Bash
    myVariable="''"
    
    # Correct in PowerShell
    $myVariable = "''"
    $myVariable = '""'
    

Boşlukla ayrılmış değerler

Bazı Azure CLI komutları boşlukla ayrılmış değerlerin listesini alır. Anahtar adı veya değer boşluk içeriyorsa, çiftin tamamını sarmalayın: "my key=my value". Örneğin:

az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"

CLI parametresi boşlukla ayrılmış bir liste kabul ettiğini belirttiğinde, iki biçimden biri beklenir:

  • Sıralanmamış, boşlukla ayrılmış liste örneği: --parameterName firstValue secondValue

  • Tırnak içine alınmış boşlukla ayrılmış liste örneği: --parameterName "firstValue" "secondValue"

Bu örnek, içinde boşluk bulunan bir dizedir. Boşlukla ayrılmış bir liste değil: --parameterName "firstValue secondValue"

Özel karakterler

PowerShell betik dilinde , gibi @özel karakterler vardır. Azure CLI'yi PowerShell'de çalıştırmak için, kaçış için özel karakterin önüne ekleyin ` . Değeri tek veya çift tırnak "/"içine de alabilirsiniz.

# The following three examples will work in PowerShell
--parameterName `@parameters.json
--parameterName '@parameters.json'
--parameterName "@parameters.json"

# This example will not work in PowerShell
--parameterName @parameters.json

Kısa çizgi karakterleri

Parametrenin değeri kısa çizgiyle başlıyorsa, Azure CLI bunu parametre adı olarak ayrıştırmaya çalışır. Değer olarak ayrıştırmak için parametresinin adını ve değerini birleştirmek için kullanın = : --password="-VerySecret".

--query parametresi

parametresini --query bir komutla kullandığınızda, JMESPath'in bazı karakterlerinin kabukta kaçılması gerekir.

Bu üç komut Bash'te doğru ve eşdeğerdir:

az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""

Bash'teki yanlış komutlara iki örnek aşağıda verilmiştir:

# Wrong, as the dash needs to be quoted in a JMESPath query
az version --query azure-cli
az version: error: argument --query: invalid jmespath_type value: 'azure-cli'

# Wrong, as the dash needs to be quoted in a JMESPath query, but quotes are interpreted by Bash
az version --query "azure-cli"
az version: error: argument --query: invalid jmespath_type value: 'azure-cli'

Bash, PowerShell ve Cmd arasında daha fazla örnek karşılaştırma için bkz . Azure CLI komut çıktısını sorgulama.

--debug parametresi

Alıntılama sorununu gidermenin en iyi yolu, komutu bayrağıyla --debug çalıştırmaktır. Bu bayrak, Python söz diziminde Azure CLI tarafından alınan gerçek bağımsız değişkenleri gösterir.

ile --debugAzure CLI komutlarının sorunlarını giderme hakkında daha fazla bilgi için bkz . Azure CLI sorunlarını giderme.

Betik dili kuralları

aşağıda, ilgili kuruluşların yayımladığı betik dili kurallarının hızlı bağlantıları verilmiştir:

Not

PowerShell'deki bilinen bir sorun nedeniyle bazı ek kaçış kuralları geçerlidir. Daha fazla bilgi için bkz . Azure CLI'yi PowerShell betik dilinde çalıştırmayla ilgili önemli noktalar.

Ayrıca bkz.

Bu makalelerde daha birçok betik dili karşılaştırması bulabilirsiniz: