Delen via


Verschillen tussen scripttalen citeren

Wanneer u met Azure CLI-opdrachten werkt, moet u weten hoe uw scripttaal aanhalingstekens en escapetekens gebruikt. Als u scripts ondersteunt die in verschillende shells worden gebruikt, bespaart u waardevolle ontwikkeluren als u inzicht krijgt in verschillen.

Hier volgen enkele suggesties om onverwachte resultaten met parameterwaarden met enkele of dubbele aanhalingstekens of escapetekens te voorkomen:

Spaties en aanhalingstekens

  • Als u een parameterwaarde opgeeft die witruimte bevat, verpakt u de waarde tussen aanhalingstekens.

  • Als uw variabelewaarde in Bash en PowerShell enkele aanhalingstekens bevat, verpakt u de waarde tussen dubbele aanhalingstekens en omgekeerd.

  • In Bash worden dubbele aanhalingstekens die zijn ontsnapt, behandeld als onderdeel van de tekenreeks.

  • In de Windows-opdrachtprompt worden aanhalingstekens binnen variabele waarden behandeld als onderdeel van de waarde.

Enkele voorbeelden:

# 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-uitvoer voor de juiste voorbeelden is als volgt:

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

Als u de aanhalingstekens in de uitvoer wilt opnemen, escapet u de variabele als volgt: 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-tekenreeksen

  • Gebruik enkele aanhalingstekens om de inhoud in een JSON-tekenreeks te behouden. Enkele aanhalingstekens zijn nodig bij het opgeven van inline JSON-waarden. Deze JSON is bijvoorbeeld juist in zowel Bash als PowerShell: '{"key": "value"}'.

  • Als uw opdracht wordt uitgevoerd bij een Windows-opdrachtprompt, moet u dubbele aanhalingstekens gebruiken. Het equivalent van de bovenstaande JSON-tekenreeks in Cmd.exe is "{"key":"value"}" .

  • Als de JSON-waarde dubbele aanhalingstekens bevat, moet u deze escapen.

  • Wanneer u met JSON-parameterwaarden werkt, kunt u overwegen de conventie van @<file> Azure CLI te gebruiken en de interpretatiemechanismen van de shell te omzeilen.

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

Hier volgen de geaccepteerde JSON-indelingspatronen voor Bash, PowerShell en Cmd:

Gebruik de opdracht van Bash clear om console-uitvoer tussen tests te verwijderen.

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

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

Deze volgende twee voorbeelden zijn onjuist omdat aanhalingstekens en spaties worden geïnterpreteerd door Bash.

Onjuiste indeling Probleem Console-uitvoer
az {"key":"value"} --debug Ontbrekende enkele aanhalingstekens of escapetekens Opdrachtargumenten: ['{key:value}', '--debug']
az {"key": "value"} --debug Ontbrekende enkele aanhalingstekens of escapetekens en bevat extra spatie Opdrachtargumenten: ['{key:', 'value}', '--debug']

Lege tekenreeksen

  • Als uw waarde in PowerShell een lege aanhalingstekenreeks () is,'' gebruikt u '""'.

  • Als uw waarde in Bash of PowerShell een lege aanhalingstekenreeks ('') is, gebruikt u "''".

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

Door spaties gescheiden waarden

Sommige Azure CLI-opdrachten nemen een lijst met door spaties gescheiden waarden. Als de sleutelnaam of -waarde spaties bevat, verpakt u het hele paar: "my key=my value". Voorbeeld:

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

Wanneer een CLI-parameter aangeeft dat deze een door spaties gescheiden lijst accepteert, wordt een van de volgende twee indelingen verwacht:

  • Voorbeeld van niet-aanhalingstekens, door spaties gescheiden lijst: --parameterName firstValue secondValue

  • Voorbeeld van door spaties gescheiden lijst tussen aan citeren: --parameterName "firstValue" "secondValue"

Dit voorbeeld is een tekenreeks met daarin een spatie. Het is geen door spaties gescheiden lijst: --parameterName "firstValue secondValue"

Speciale tekens

Er zijn speciale tekens in de PowerShell-scripttaal, zoals op @. Als u Azure CLI wilt uitvoeren in PowerShell, voegt u deze toe ` vóór het speciale teken om deze te escapen. U kunt de waarde ook tussen enkele of dubbele aanhalingstekens "/"plaatsen.

# 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

Afbreekstreepjes

Als de waarde van een parameter begint met een afbreekstreepje, probeert Azure CLI deze te parseren als parameternaam. Als u deze wilt parseren als waarde, gebruikt = u om de parameternaam en -waarde samen te voegen: --password="-VerySecret".

De --query parameter

Wanneer u de --query parameter met een opdracht gebruikt, moeten sommige tekens van JMESPath worden ontsnapt in de shell.

Deze drie opdrachten zijn correct en gelijkwaardig in Bash:

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

Hier volgen twee voorbeelden van onjuiste opdrachten 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'

Zie De uitvoer van de Azure CLI-opdracht opvragen voor meer voorbeelden tussen Bash, PowerShell en Cmd.

De --debug parameter

De beste manier om een quotingprobleem op te lossen, is door de opdracht uit te voeren met de --debug vlag. Met deze vlag worden de werkelijke argumenten weergegeven die zijn ontvangen door de Azure CLI in de syntaxis van Python.

Zie Problemen met Azure CLI oplossen voor meer informatie over het oplossen van problemen met --debugAzure CLI-opdrachten.

Taalregels voor scripts

Hier volgen snelle koppelingen naar taalregels voor scripts, zoals gepubliceerd door hun respectieve organisaties:

Notitie

Vanwege een bekend probleem in PowerShell zijn enkele extra escaperegels van toepassing. Zie Overwegingen voor het uitvoeren van de Azure CLI in een PowerShell-scripttaal voor meer informatie.

Zie ook

In deze artikelen vindt u nog veel meer vergelijkingen voor scripttaal: