A szkriptnyelvek közötti különbségek idézése
Az Azure CLI-parancsok használatakor vegye figyelembe, hogy a szkriptnyelv hogyan használ idézőjeleket, és hogyan menekül a karakterek elől. Ha támogatja a különböző rendszerhéjakban használt szkripteket, a különbségek értelmezése értékes fejlesztési órákat takarít meg.
Az egy- vagy dupla idézőjeleket vagy feloldó karaktereket tartalmazó paraméterértékekkel nem várt eredmények elkerülése érdekében íme néhány javaslat:
Fehér szóközök és idézőjelek
Ha olyan paraméterértéket ad meg, amely szóközt tartalmaz, az értéket idézőjelek közé csomagolja.
A Bashben és a PowerShellben, ha a változó értéke egyetlen idézőjelet tartalmaz, csomagolja be az értéket dupla idézőjelekbe, és fordítva.
A Bashben a szökött idézőjelek a sztring részeként lesznek kezelve.
A Windows parancssorában a változó értékeken belüli idézőjelek az érték részeként lesznek kezelve.
Íme néhány példa:
# 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
A megfelelő példák Bash-kimenete a következő:
my string ' ' wrapped in double quotes
my string " " wrapped in single quotes
my string with escaped " " double quotes wrapped in double quotes
Ha azt szeretné, hogy a kimenetben szereplő idézőjelek szerepeljenek, meneküljön el a következő változótól: 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-sztringek
A tartalom egy JSON-sztringben való megőrzéséhez használjon egyetlen idézőjelet. A beágyazott JSON-értékek megadásához egyszeri idézőjelekre van szükség. Ez a JSON például a Bash és a PowerShell esetében is helyes:
'{"key": "value"}'
.Ha a parancs windowsos parancssorban fut, dupla idézőjeleket kell használnia. A fenti JSON-sztring megfelelője a Cmd.exe.
"{"key":"value"}"
Ha a JSON-érték dupla idézőjeleket tartalmaz, meg kell szabadulnia tőlük.
A JSON-paraméterértékek használatakor fontolja meg az Azure CLI konvenciójának
@<file>
használatát, és megkerülje a rendszerhéj értelmezési mechanizmusait.az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
A Bash, a PowerShell és a Cmd elfogadott JSON-formátummintái a következők:
A Bash parancsának clear
használatával eltávolíthatja a konzolkimenetet a tesztek között.
# Correct in Bash
az '{"key":"value"}' --debug
>> Command arguments: ['{"key":"value"}', '--debug']
az "{\"key\":\"value\"}" --debug
>> Command arguments: ['{"key":"value"}', '--debug']
A következő két példa helytelen, mivel a Bash idézőjeleket és szóközöket értelmez.
Helytelen formátum | Probléma | Konzolkimenet |
---|---|---|
az {"key":"value"} --debug | Hiányzó idézőjelek vagy feloldó karakterek | Parancsargumentumok: "{key:value}", "--debug" |
az {"key": "value"} --debug | Hiányzó idézőjelek vagy feloldó karakterek, és további szóközöket tartalmaz | Parancsargumentumok: [{key:', 'value}', '--debug] |
Üres sztringek
Ha az érték üres idézőjelek sztringje (
''
), használja'""'
a PowerShellben.A Bashben vagy a PowerShellben, ha az érték egy üres idézőjel-sztring (
''
), használja a következőt"''"
: .# Correct in Bash myVariable="''" # Correct in PowerShell $myVariable = "''" $myVariable = '""'
Térelválasztó értékek
Egyes Azure CLI-parancsok a szóközzel elválasztott értékek listáját veszik fel. Ha a kulcs neve vagy értéke szóközöket tartalmaz, csomagolja be az egész párt: "my key=my value"
. Példa:
az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
Ha egy CLI-paraméter azt állítja, hogy egy szóközzel elválasztott listát fogad el, a következő két formátum egyike várható:
Példa a nem kvótált, szóközzel elválasztott listára:
--parameterName firstValue secondValue
Példa idézett térelválasztó listára:
--parameterName "firstValue" "secondValue"
Ez a példa egy szóközzel rendelkező sztring. Ez nem szóközzel elválasztott lista: --parameterName "firstValue secondValue"
Speciális karakterek
A PowerShell-szkriptnyelvben speciális karakterek találhatók, például a következő helyen @
: . Az Azure CLI PowerShellben való futtatásához adja hozzá `
a speciális karaktert, hogy elkerülje azt. Az értéket egy vagy két idézőjelbe is belefoglalhatja "
/"
.
# 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
Kötőjelkarakterek
Ha egy paraméter értéke kötőjellel kezdődik, az Azure CLI megpróbálja paraméternévként elemezni. Értékként való elemzéséhez használja =
a paraméter nevét és értékét: --password="-VerySecret"
.
A --query
paraméter
Ha a --query
paramétert egy paranccsal használja, a JMESPath néhány karakterét meg kell szökni a rendszerhéjban.
Ez a három parancs helyes és egyenértékű a Bashben:
az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""
Íme két példa a Bash helytelen parancsaira :
# 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'
A Bash, a PowerShell és a Cmd közötti összehasonlítást az Azure CLI-parancskimenet lekérdezése című témakörben talál.
A --debug
paraméter
Az idézőjelekkel kapcsolatos problémák elhárításának legjobb módja, ha a parancsot a --debug
jelölővel futtatja. Ez a jelző az Azure CLI által a Python szintaxisában kapott tényleges argumentumokat jeleníti meg.
Az Azure CLI-parancsok --debug
hibaelhárításával kapcsolatos további információkért lásd az Azure CLI hibaelhárítását.
Szkriptelési nyelvi szabályok
Az alábbiakban a megfelelő szervezetek által közzétett szkriptelési nyelvi szabályokra mutató gyorshivatkozások találhatók:
- Bash-szkriptnyelv: Bash-idéző szabályok
- PowerShell-szkriptnyelv: PowerShell-idéző szabályok
- Windows parancssor: Útmutató: A Windows parancssorában található karakterek, elválasztójelek és idézőjelek feloldása
Feljegyzés
A PowerShell ismert hibája miatt néhány további menekülési szabály is érvényben van. További információkért tekintse meg az Azure CLI PowerShell-szkriptelési nyelven való futtatásával kapcsolatos szempontokat.
Lásd még
Az alábbi cikkekben további szkriptnyelv-összehasonlításokat talál: