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.
Taalregels voor scripts
Hier volgen snelle koppelingen naar taalregels voor scripts, zoals gepubliceerd door hun respectieve organisaties:
- Bash-scripttaal: Bash-quotingsregels
- PowerShell-scripttaal: PowerShell-quotingregels
- Windows-opdrachtprompt: Instructies: Escape-tekens, scheidingstekens en aanhalingstekens op de Windows-opdrachtregel
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: