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 --debug
v 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:
- Skriptovací jazyk Bash: Pravidla uvozování Bash
- Skriptovací jazyk PowerShellu: Pravidla uvozování PowerShellu
- Příkazový řádek systému Windows: Postupy: Řídicí znaky, oddělovače a uvozovky na příkazovém řádku Windows
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: