Sdílet prostřednictvím


Citace rozdílů mezi skriptovacími jazyky

Při práci s příkazy Azure CLI mějte na paměti, jak skriptovací jazyk používá uvozovky a řídicí znaky. Pokud podporujete skripty používané v různých prostředích, ušetří vám pochopení rozdílů v uvozování cenné hodiny vývoje.

Abyste se vyhnuli neočekáženým výsledkům s hodnotami parametrů obsahujícími jednoduché nebo dvojité uvozovky nebo řídicí znaky, tady je několik návrhů:

Prázdné mezery a uvozovky

  • Pokud zadáte hodnotu parametru, která obsahuje prázdné znaky, zabalte hodnotu do uvozovek.

  • Pokud hodnota proměnné v Bash a PowerShellu obsahuje jednoduché uvozovky, zabalte hodnotu do dvojitých uvozovek a naopak.

  • V Bash jsou dvojité uvozovky, které jsou uvozovány, považovány za součást řetězce.

  • V příkazovém řádku Windows se uvozovky uvnitř hodnot proměnných považují za součást hodnoty.

Tady je pár příkladů:

# 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

Výstup Bash pro správné příklady je následující:

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

Pokud chcete, aby byly uvozovky zahrnuté ve výstupu, uvozujte proměnnou takto: 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"

Řetězce JSON

  • Pomocí jednoduchých uvozovek zachováte obsah uvnitř řetězce JSON. Jednoduché uvozovky jsou nezbytné při zadávání vložených hodnot JSON. Tento KÓD JSON je například správný v prostředí Bash i v PowerShellu: '{"key": "value"}'.

  • Pokud příkaz běží na příkazovém řádku Windows, musíte použít dvojité uvozovky. Ekvivalent výše uvedeného řetězce JSON v Cmd.exe je "{"key":"value"}" .

  • Pokud hodnota JSON obsahuje dvojité uvozovky, musíte je uvozovat.

  • Při práci s hodnotami parametrů JSON zvažte použití konvence Azure CLI @<file> a obejití mechanismů interpretace prostředí.

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

Tady jsou akceptované vzory formátu JSON pro Bash, PowerShell a Cmd:

K odebrání výstupu clear konzoly mezi testy použijte příkaz Bash.

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

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

Tyto další dva příklady jsou nesprávné jako uvozovky a mezery jsou interpretovány Bashem.

Nesprávný formát Problém Výstup konzoly
az {"key":"value"} --debug Chybějící jednoduché uvozovky nebo řídicí znaky Argumenty příkazu: ['{key:value}', '--debug']
az {"key": "value"} --debug Chybějící jednoduché uvozovky nebo řídicí znaky a obsahuje nadbytečné mezery. Argumenty příkazu: ['{key:', 'value}', '--debug']

Prázdné řetězce

  • Pokud je hodnota v PowerShellu prázdný řetězec uvozovek (''), použijte '""'.

  • Pokud je hodnota v Bash nebo PowerShellu prázdným řetězcem uvozovek (''), použijte "''".

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

Hodnoty oddělené mezerami

Některé příkazy Azure CLI přebírají seznam hodnot oddělených mezerami. Pokud název klíče nebo hodnota obsahuje mezery, zabalte celý pár: "my key=my value". Příklad:

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

Když parametr rozhraní příkazového řádku uvádí, že přijímá seznam oddělený mezerami, očekává se jeden ze dvou formátů:

  • Příklad seznamu oddělených mezerami: --parameterName firstValue secondValue

  • Příklad seznamu odděleného mezerami: --parameterName "firstValue" "secondValue"

Tento příklad je řetězec s mezerou. Nejedná se o seznam oddělený mezerami.: --parameterName "firstValue secondValue"

Speciální znaky

Skriptovací jazyk PowerShellu má speciální znaky, například v @. Pokud chcete spustit Azure CLI v PowerShellu, přidejte ` ho před speciální znak, který ho unikne. Hodnotu můžete uzavřít také do jednoduchých nebo dvojitých uvozovek "/".

# 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

Znaky spojovníku

Pokud hodnota parametru začíná pomlčkou, Azure CLI se ji pokusí analyzovat jako název parametru. Chcete-li jej analyzovat jako hodnotu, použijte = ke zřetězení názvu a hodnoty parametru: --password="-VerySecret".

Parametr --query

Pokud použijete --query parametr s příkazem, některé znaky JMESPath musí být v prostředí uchycené.

Tyto tři příkazy jsou v Bash správné a ekvivalentní:

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

Tady jsou dva příklady nesprávných příkazů v 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'

Další příklady porovnání mezi Bash, PowerShellem a Cmd najdete v tématu Dotazování výstupu příkazu Azure CLI.

Parametr --debug

Nejlepším způsobem, jak vyřešit problém s uvozováním, je spustit příkaz s příznakem --debug . Tento příznak odhalí skutečné argumenty přijaté rozhraním příkazového řádku Azure v syntaxi Pythonu.

Další informace o řešení potíží s příkazy Azure CLI najdete --debugv tématu Řešení potíží s Azure CLI.

Pravidla skriptovacího jazyka

Tady jsou rychlé odkazy na skriptovací pravidla jazyka publikovaná příslušnými organizacemi:

Poznámka:

Kvůli známému problému v PowerShellu platí některá další pravidla pro zapouzdření. Další informace najdete v tématu Důležité informace o spuštění Azure CLI ve skriptovacím jazyce PowerShellu.

Viz také

Další porovnání skriptovacího jazyka najdete v těchto článcích: