Dela via


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 --debugfinns i Felsöka Azure CLI.

Språkregler för skript

Här är snabblänkar till skriptspråkregler som publicerats av respektive organisation:

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: