Citera skillnader mellan skriptspråk
När du arbetar med Azure CLI-kommandon bör du vara medveten om hur skriptspråket använder citattecken och escape-tecken. Om du stöder skript som används i olika gränssnitt sparar du värdefulla utvecklingstimmar genom att förstå citatskillnader.
Här är några förslag för att undvika oväntade resultat med parametervärden som innehåller enkla eller dubbla citattecken eller escape-tecken:
Blanksteg och citattecken
Om du anger ett parametervärde som innehåller tomt utrymme omsluter du värdet inom citattecken.
Om variabelvärdet innehåller enkla citattecken i Bash och PowerShell omsluter du värdet med dubbla citattecken och vice versa.
I Bash behandlas dubbla citattecken som är undantagna som en del av strängen.
I Windows-kommandotolken behandlas citattecken i variabelvärden som en del av värdet.
Några exempel:
# 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
Bash-utdata för rätt exempel är följande:
my string ' ' wrapped in double quotes
my string " " wrapped in single quotes
my string with escaped " " double quotes wrapped in double quotes
Om du vill att citattecknarna ska ingå i utdata kan du undvika variabeln så här: 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-strängar
Använd enkla citattecken för att bevara innehållet i en JSON-sträng. Enkla citattecken krävs när du anger infogade JSON-värden. Den här JSON-filen är till exempel korrekt i både Bash och PowerShell:
'{"key": "value"}'
.Om kommandot körs i en Windows-kommandotolk måste du använda dubbla citattecken. Motsvarigheten till ovanstående JSON-sträng i Cmd.exe är
"{"key":"value"}"
.Om JSON-värdet innehåller dubbla citattecken måste du undvika dem.
När du arbetar med JSON-parametervärden bör du överväga att använda Azure CLI:s
@<file>
konvention och kringgå gränssnittets tolkningsmekanismer.az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
Här är de godkända JSON-formatmönstren för Bash, PowerShell och Cmd:
Använd Bash-kommandot clear
för att ta bort konsolutdata mellan testerna.
# Correct in Bash
az '{"key":"value"}' --debug
>> Command arguments: ['{"key":"value"}', '--debug']
az "{\"key\":\"value\"}" --debug
>> Command arguments: ['{"key":"value"}', '--debug']
Följande två exempel är felaktiga eftersom citattecken och blanksteg tolkas av Bash.
Felaktigt format | Problem | Konsolutdata |
---|---|---|
az {"key":"value"} --debug | Enkla citattecken eller escape-tecken saknas | Kommandoargument: ['{key:value}', '--debug'] |
az {"key": "value"} --debug | Enkla citattecken eller escape-tecken saknas och innehåller extra utrymme | Kommandoargument: ['{key:', 'value}', '--debug'] |
Tomma strängar
Om värdet i PowerShell är en tom citatteckensträng (
''
) använder du'""'
.Om värdet är en tom citatsträng (
''
) i Bash eller PowerShell använder du"''"
.# Correct in Bash myVariable="''" # Correct in PowerShell $myVariable = "''" $myVariable = '""'
Blankstegsavgränsade värden
Vissa Azure CLI-kommandon tar en lista över blankstegsavgränsade värden. Om nyckelnamnet eller värdet innehåller blanksteg omsluter du hela paret: "my key=my value"
. Till exempel:
az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
När en CLI-parameter anger att den accepterar en blankstegsavgränsad lista förväntas ett av två format:
Exempel på en icke-quoterad, blankstegsavgränsad lista:
--parameterName firstValue secondValue
Exempel på en lista med angiven blankstegsavgränsad:
--parameterName "firstValue" "secondValue"
Det här exemplet är en sträng med ett blanksteg i. Det är inte en blankstegsavgränsad lista: --parameterName "firstValue secondValue"
Specialtecken
Det finns specialtecken i PowerShell-skriptspråket, till exempel på @
. Om du vill köra Azure CLI i PowerShell lägger du till `
före specialtecknet för att undvika det. Du kan också omsluta värdet med enkla eller dubbla citattecken "
/"
.
# 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
Bindestreckstecken
Om en parameters värde börjar med ett bindestreck försöker Azure CLI parsa det som ett parameternamn. Om du vill parsa det som värde använder du =
för att sammanfoga parameternamnet och värdet: --password="-VerySecret"
.
Parametern --query
När du använder parametern --query
med ett kommando måste vissa tecken i JMESPath vara undantagna i gränssnittet.
Dessa tre kommandon är korrekta och likvärdiga i Bash:
az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""
Här är två exempel på felaktiga kommandon i Bash:
# 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'
Fler exempeljämförelser mellan Bash, PowerShell och Cmd finns i Fråga azure CLI-kommandoutdata.
Parametern --debug
Det bästa sättet att felsöka ett citatproblem är att köra kommandot med --debug
flaggan. Den här flaggan visar de faktiska argument som tas emot av Azure CLI i Pythons syntax.
Mer information om hur du felsöker Azure CLI-kommandon med --debug
finns i Felsöka Azure CLI.
Språkregler för skript
Här är snabblänkar till skriptspråkregler som publicerats av respektive organisation:
- Bash-skriptspråk: Bash citerar regler
- PowerShell-skriptspråk: PowerShell-citatregler
- Kommandotolk för Windows: Instruktioner: Escape-tecken, avgränsare och citattecken på Windows-kommandoraden
Kommentar
På grund av ett känt problem i PowerShell gäller vissa extra undantagsregler. Mer information finns i Överväganden för att köra Azure CLI på ett PowerShell-skriptspråk.
Se även
Hitta många fler skriptspråkjämförelser i dessa artiklar: