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 escape caracteres. Se você oferecer suporte a scripts usados em shells diferentes, 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, coloque o valor entre aspas.
No Bash e no PowerShell, se o valor da variável contiver aspas simples, coloque o valor entre aspas duplas e vice-versa.
No Bash, aspas duplas que escapam são tratadas como parte da cadeia de caracteres.
No prompt de comando do Windows, as aspas dentro de valores de variáveis são tratadas como parte do valor.
Veja 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"
Cadeias de caracteres JSON
Use aspas simples para preservar o conteúdo dentro de uma cadeia de caracteres JSON. Aspas 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 no Prompt de Comando do Windows, você precisará 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 convenção da CLI
@<file>
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']
Esses dois exemplos seguintes estão incorretos, pois aspas e espaços são interpretados pelo Bash.
Formato incorreto | Problema | Saída do console |
---|---|---|
az {"key":"value"} --debug | Aspas simples ausentes ou caracteres de escape | Argumentos de comando: ['{key:value}', '--debug'] |
az {"key": "value"} --debug | Aspas simples ausentes ou caracteres de escape e contém espaço extra | Argumentos de comando: ['{key:', 'value}', '--debug'] |
Cadeias de caracteres vazias
No PowerShell, se seu valor for uma cadeia de caracteres de aspas vazia (
''
), use'""'
.No Bash ou PowerShell, se seu valor for uma cadeia de caracteres 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ços. Se o nome da chave ou o valor contiver espaços, coloque o par inteiro entre aspas: "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 afirma que aceita uma lista separada por espaço, um destes dois formatos é esperado:
Exemplo de lista sem aspas separada por espaço:
--parameterName firstValue secondValue
Exemplo de lista separada por espaço entre aspas:
--parameterName "firstValue" "secondValue"
Este exemplo é uma cadeia de caracteres que contém um espaço. Não é uma lista separada por espaço: --parameterName "firstValue secondValue"
Caracteres 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 fazer o escape. 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 um valor de parâmetro começar com um hífen, a CLI do Azure tentará analisá-lo como um nome de parâmetro. Se quiser analisá-lo como valor, use =
para concatenar o nome e o valor do parâmetro: --password="-VerySecret"
.
O --query
parâmetro
Ao usar o parâmetro --query
com um comando, alguns caracteres de JMESPath precisam usar o caractere de escape no shell.
Estes três comandos estão corretos e são equivalentes no 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 aspas é executar o comando com o sinalizador --debug
. Esse sinalizador mostra os argumentos reais recebidos pela CLI do Azure na sintaxe Python.
Para obter mais informações sobre como solucionar problemas de comandos da CLI do Azure com --debug
o , consulte Solucionando 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 respectivas organizações:
- Linguagem de script Bash: regras de citação do Bash
- Linguagem de script do PowerShell: Regras de Cotação do PowerShell
- Prompt de comando do Windows: Como fazer : Caracteres de escape, delimitadores e aspas na linha de comando do Windows
Observação
Devido ao problema conhecido do PowerShell, algumas regras extras de escape se aplicam. Para obter mais informações, consulte Considerações para executar a CLI do Azure em uma linguagem de script do PowerShell.
Confira também
Encontre muito mais comparações de linguagem de script nestes artigos: