Megosztás a következőn keresztül:


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 --debughibaelhá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:

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: