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 --debug
Azure 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:
- Bash betik dili: Bash alıntılama kuralları
- PowerShell betik dili: PowerShell AlıntıLama Kuralları
- Windows Komut İstemi: Nasıl Yapılır: Windows komut satırında Kaçış Karakterleri, Sınırlayıcılar ve Tırnak İşaretleri
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:
- Bash, PowerShell ve Cmd öğreticisindeki söz dizimi farklarını öğrenin
- JMESPath sorgusu kullanarak Azure CLI komut çıkışını sorgulama
- Azure CLI'yi PowerShell betik dilinde çalıştırma konusunda dikkat edilmesi gerekenler