Citando diferenças entre linguagens de script
Ao trabalhar com comandos da CLI do Azure, esteja ciente de como sua linguagem de script usa aspas e escapa de caracteres. Se você oferecer suporte a scripts usados em diferentes shells, entender as diferenças de cotação economizará valiosas horas de desenvolvimento.
Para evitar resultados imprevistos com valores de parâmetros contendo aspas simples ou duplas, ou caracteres de escape, aqui estão algumas sugestões:
Espaços em branco e aspas
Se você fornecer um valor de parâmetro que contenha espaço em branco, envolva o valor entre aspas.
No Bash e no PowerShell, se o valor da variável contiver aspas simples, envolva o valor em aspas duplas e vice-versa.
Em Bash, aspas duplas que escapam, são tratadas como parte da cadeia de caracteres.
No Prompt de Comando do Windows, as aspas dentro dos valores das variáveis são tratadas como parte do valor.
Eis alguns exemplos:
# 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 saída Bash para os exemplos corretos é a seguinte:
my string ' ' wrapped in double quotes
my string " " wrapped in single quotes
my string with escaped " " double quotes wrapped in double quotes
Se você quiser que as cotações sejam incluídas na saída, escape da variável assim: 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"
Strings JSON
Use aspas simples para preservar o conteúdo dentro de uma cadeia de caracteres JSON. Cotações simples são necessárias ao fornecer valores JSON embutidos. Por exemplo, esse JSON está correto no Bash e no PowerShell:
'{"key": "value"}'
.Se o comando for executado em um prompt de comando do Windows, você deverá usar aspas duplas. O equivalente da cadeia de caracteres JSON acima em Cmd.exe é
"{"key":"value"}"
.Se o valor JSON contiver aspas duplas, você deverá escapar delas.
Ao trabalhar com valores de parâmetro JSON, considere usar a
@<file>
convenção da CLI do Azure e ignorar os mecanismos de interpretação do shell.az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
Aqui estão os padrões de formato JSON aceitos para Bash, PowerShell e Cmd:
Use o comando do Bash para remover a saída do clear
console entre os testes.
# Correct in Bash
az '{"key":"value"}' --debug
>> Command arguments: ['{"key":"value"}', '--debug']
az "{\"key\":\"value\"}" --debug
>> Command arguments: ['{"key":"value"}', '--debug']
Estes dois exemplos seguintes estão incorretos, pois aspas e espaços são interpretados por Bash.
Formato incorreto | Problema | Saída da consola |
---|---|---|
az {"key":"value"} --debug | Faltam aspas simples ou caracteres de escape | Argumentos de comando: ['{key:value}', '--debug'] |
az {"key": "value"} --debug | Faltam aspas simples ou caracteres de escape e contém espaço extra | Argumentos de comando: ['{key:', 'value}', '--debug'] |
Strings vazias
No PowerShell, se o seu valor for uma cadeia de caracteres de aspas vazia (
''
), use'""'
.Em Bash ou PowerShell, se o seu valor for uma cadeia de aspas vazia (
''
), use"''"
.# Correct in Bash myVariable="''" # Correct in PowerShell $myVariable = "''" $myVariable = '""'
Valores separados por espaço
Alguns comandos da CLI do Azure usam uma lista de valores separados por espaço. Se o nome ou valor da chave contiver espaços, envolva todo o par: "my key=my value"
. Por exemplo:
az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
Quando um parâmetro da CLI indica que aceita uma lista separada por espaço, um dos dois formatos é esperado:
Exemplo de lista sem aspas e separada por espaços:
--parameterName firstValue secondValue
Exemplo de lista separada por espaços entre aspas:
--parameterName "firstValue" "secondValue"
Este exemplo é uma cadeia de caracteres com um espaço. Não é uma lista separada por espaço: --parameterName "firstValue secondValue"
Carateres especiais
Há caracteres especiais na linguagem de script do PowerShell, como em @
. Para executar a CLI do Azure no PowerShell, adicione `
antes do caractere especial para escapar dele. Você também pode colocar o valor entre aspas simples ou duplas "
/"
.
# 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
Caracteres de hífen
Se o valor de um parâmetro começar com um hífen, a CLI do Azure tentará analisá-lo como um nome de parâmetro. Para analisá-lo como valor, use =
para concatenar o nome e o valor do parâmetro: --password="-VerySecret"
.
O --query
parâmetro
Quando você usa o --query
parâmetro com um comando, alguns caracteres de JMESPath precisam ser escapados no shell.
Estes três comandos são corretos e equivalentes em Bash:
az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""
Aqui estão dois exemplos de comandos incorretos no 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'
Para obter mais exemplos de comparações entre Bash, PowerShell e Cmd, consulte Query Azure CLI command output.
O --debug
parâmetro
A melhor maneira de solucionar um problema de cotação é executar o comando com o --debug
sinalizador. Esse sinalizador revela os argumentos reais recebidos pela CLI do Azure na sintaxe do Python.
Para obter mais informações sobre como solucionar problemas de comandos da CLI do Azure com --debug
o , consulte Solução de problemas da CLI do Azure.
Regras de linguagem de script
Aqui estão links rápidos para regras de linguagem de script publicadas por suas respetivas organizações:
- Linguagem de script Bash: regras de citação Bash
- Linguagem de script do PowerShell: Regras de citação do PowerShell
- Prompt de comando do Windows: Como escapar caracteres, delimitadores e aspas na linha de comando do Windows
Nota
Devido a um problema conhecido no PowerShell, algumas regras de escape extras se aplicam. Para obter mais informações, consulte Considerações para executar a CLI do Azure em uma linguagem de script do PowerShell.
Consulte também
Encontre muitas outras comparações de linguagem de script nestes artigos: