Quotieren von Unterschieden zwischen Skriptsprachen

Wenn Sie mit Azure CLI-Befehlen arbeiten, beachten Sie, wie Ihre Skriptsprache Anführungszeichen und Escapezeichen verwendet. Wenn Sie Skripts unterstützen, die in verschiedenen Shells verwendet werden, sparen Ihnen das Verständnis von Differenzen wertvolle Entwicklungsstunden.

Um unerwartete Ergebnisse mit Parameterwerten mit einfachen oder doppelten Anführungszeichen oder Escapezeichen zu vermeiden, sind hier einige Vorschläge:

Leerzeichen und Anführungszeichen

  • Wenn Sie einen Parameterwert angeben, der Leerzeichen enthält, umschließen Sie den Wert in Anführungszeichen.

  • Wenn Der Variablewert in Bash und PowerShell einfache Anführungszeichen enthält, umschließen Sie den Wert in doppelte Anführungszeichen und umgekehrt.

  • In Bash werden doppelte Anführungszeichen, die escaped sind, als Teil der Zeichenfolge behandelt.

  • In der Windows-Eingabeaufforderung werden Anführungszeichen innerhalb von Variablenwerten als Teil des Werts behandelt.

Hier sind einige Beispiele:

# 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

Die Bash-Ausgabe für die richtigen Beispiele lautet wie folgt:

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

Wenn die in der Ausgabe enthaltenen Anführungszeichen enthalten sein sollen, escapeen Sie der Variablen wie folgt: 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-Zeichenfolgen

  • Verwenden Sie einfache Anführungszeichen, um den Inhalt in einer JSON-Zeichenfolge beizubehalten. Einfache Anführungszeichen sind erforderlich, wenn Inline-JSON-Werte bereitgestellt werden. Dieser JSON-Code ist beispielsweise sowohl in Bash als auch in PowerShell korrekt: '{"key": "value"}'.

  • Wenn Ihr Befehl über eine Windows-Eingabeaufforderung ausgeführt wird, müssen Sie doppelte Anführungszeichen verwenden. Das Äquivalent der obigen JSON-Zeichenfolge in Cmd.exe lautet "{"key":"value"}" .

  • Wenn der JSON-Wert doppelte Anführungszeichen enthält, müssen Sie diese escapen.

  • Beim Arbeiten mit JSON-Parameterwerten sollten Sie die Konvention der @<file> Azure CLI verwenden und die Interpretationsmechanismen der Shell umgehen.

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

Hier sind die akzeptierten JSON-Formatmuster für Bash, PowerShell und Cmd:

Verwenden Sie bashs clear Befehl, um die Konsolenausgabe zwischen Tests zu entfernen.

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

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

Diese nächsten beiden Beispiele sind falsch, da Anführungszeichen und Leerzeichen von Bash interpretiert werden.

Falsches Format Problem Konsolenausgabe
az {"key":"value"} --debug Fehlende einfache Anführungszeichen oder Escapezeichen Befehlsargumente: ['{key:value}', '--debug']
az {"key": "value"} --debug Fehlende einfache Anführungszeichen oder Escapezeichen und zusätzliches Leerzeichen Befehlsargumente: ['{key:', 'value}', '--debug']

Leere Zeichenfolgen

  • Verwenden Sie '""'in PowerShell, wenn ihr Wert eine leere Anführungszeichenzeichenfolge ('') ist.

  • Verwenden Sie in Bash oder PowerShell, wenn ihr Wert eine leere Anführungszeichenzeichenfolge ('') "''"ist.

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

Durch Leerzeichen getrennte Werte

Einige Azure CLI-Befehle verwenden eine Liste mit durch Leerzeichen getrennten Werten. Wenn der Schlüsselname oder -wert Leerzeichen enthält, umschließen Sie das gesamte Paar: "my key=my value". Beispiel:

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

Wenn ein CLI-Parameter angibt, dass er eine durch Leerzeichen getrennte Liste akzeptiert, wird eines von zwei Formaten erwartet:

  • Beispiel für nicht angesetzte, durch Leerzeichen getrennte Liste: --parameterName firstValue secondValue

  • Beispiel für eine durch Leerzeichen getrennte Liste: --parameterName "firstValue" "secondValue"

In diesem Beispiel handelt es sich um eine Zeichenfolge mit einem Leerzeichen darin. Es handelt sich nicht um eine durch Leerzeichen getrennte Liste: --parameterName "firstValue secondValue"

Sonderzeichen

Es gibt Sonderzeichen in der PowerShell-Skriptsprache, z. B. bei @. Fügen Sie zum Ausführen der Azure CLI in PowerShell ` als Escapezeichen vor dem Sonderzeichen ein. Sie können den Wert auch in einfache oder doppelte Anführungszeichen "/" setzen.

# 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

Bindestriche

Beginnt der Wert eines Parameters mit einem Bindestrich, versucht die Azure CLI, ihn als Parameternamen zu analysieren. Wenn Sie ihn als Wert analysieren möchten, verwenden Sie =, um den Parameternamen und den Wert zu verketten: --password="-VerySecret".

Der --query Parameter

Bei Verwendung des Parameters --query mit einem Befehl müssen einige Zeichen von JMESPath in der Shell mit Escapezeichen versehen werden.

Diese drei Befehle sind korrekt und führen in Bash zum gleichen Ergebnis:

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

Hier sind zwei Beispiele für falsche Befehle in 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'

Weitere Beispielvergleiche zwischen Bash, PowerShell und Cmd finden Sie unter Abfrage-Azure CLI-Befehlsausgabe.

Der --debug Parameter

Die beste Möglichkeit zur Behandlung eines Problems mit Anführungszeichen ist die Ausführung des Befehls mit dem Flag --debug. Mit diesem Flag werden die Argumente, die von der Azure CLI tatsächlich empfangen werden, in Python-Syntax angezeigt.

Weitere Informationen zur Problembehandlung von Azure CLI-Befehlen finden --debugSie unter "Problembehandlung bei Azure CLI".

Skriptspracheregeln

Hier sind Kurzlinks zu Skriptsprachenregeln, die von ihren jeweiligen Organisationen veröffentlicht werden:

Hinweis

Aufgrund eines bekannten Problems in PowerShell gelten für Escapezeichen einige zusätzliche Regeln. Weitere Informationen finden Sie unter Überlegungen zum Ausführen der Azure CLI in einer PowerShell-Skriptsprache.

Weitere Informationen

Weitere Skriptsprachenvergleiche finden Sie in den folgenden Artikeln: