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

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: