Compartilhar via


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 --debugo , 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:

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: