Compartir a través de


Entrecomillar diferencias entre los lenguajes de scripting

Al trabajar con comandos de la CLI de Azure, tenga en cuenta cómo el lenguaje de scripting usa comillas y caracteres de escape. Si admite scripts usados en distintos shells, comprender las diferencias entre comillas le ahorra horas de desarrollo valiosas.

Para evitar resultados imprevistos con valores de parámetro que contienen comillas simples o dobles, o caracteres de escape, estas son algunas sugerencias:

Espacios en blanco y comillas

  • Si proporciona un valor de parámetro que contiene espacios en blanco, encapsula el valor entre comillas.

  • En Bash y PowerShell, si el valor de la variable contiene comillas simples, ajuste el valor entre comillas dobles y viceversa.

  • En Bash, las comillas dobles con escape se tratan como parte de la cadena.

  • En el símbolo del sistema de Windows, las comillas dentro de los valores de variable se tratan como parte del valor.

Estos son algunos ejemplos:

# 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

La salida de Bash para los ejemplos correctos es la siguiente:

my string ' ' wrapped in double quotes
my string " " wrapped in single quotes
my string with escaped " " double quotes wrapped in double quotes

Si desea que las comillas incluidas en la salida escapen a la variable como esta: 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"

Cadenas JSON

  • Use comillas simples para conservar el contenido dentro de una cadena JSON. Las comillas simples son necesarias al proporcionar valores JSON insertados. Por ejemplo, este JSON es correcto en Bash y PowerShell: '{"key": "value"}'.

  • Si el comando se ejecuta en un símbolo del sistema de Windows, debe usar comillas dobles. El equivalente de la cadena JSON anterior en Cmd.exe es "{"key":"value"}" .

  • Si el valor JSON contiene comillas dobles, debe escaparlas.

  • Al trabajar con valores de parámetro JSON, considere la posibilidad de usar la convención de la CLI de @<file> Azure y omitir los mecanismos de interpretación del shell.

    az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
    

Estos son los patrones de formato JSON aceptados para Bash, PowerShell y Cmd:

Use el comando de Bash para quitar la salida de clear la consola entre pruebas.

# Correct in Bash
az '{"key":"value"}' --debug
>> Command arguments: ['{"key":"value"}', '--debug']

az "{\"key\":\"value\"}" --debug
>> Command arguments: ['{"key":"value"}', '--debug']

Los dos ejemplos siguientes son incorrectos ya que Bash interpreta comillas y espacios.

Formato incorrecto Problema Salida de la consola
az {"key":"value"} --debug Faltan comillas simples o caracteres de escape Argumentos de comando: ['{key:value}', '--debug']
az {"key": "value"} --debug Faltan comillas simples o caracteres de escape, y contiene espacios adicionales Argumentos de comando: ['{key:', 'value}', '--debug']

Cadenas vacías

  • En PowerShell, si el valor es una cadena de comillas vacías (''), use '""'.

  • En Bash o PowerShell, si el valor es una cadena de comillas vacías (''), use "''".

    # Correct in Bash
    myVariable="''"
    
    # Correct in PowerShell
    $myVariable = "''"
    $myVariable = '""'
    

Valores separados por espacios

Algunos comandos de la CLI de Azure toman una lista de valores separados por espacios. Si el nombre o el valor de la clave contienen espacios, encapsule todo el par: "my key=my value". Por ejemplo:

az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"

Cuando un parámetro de la CLI indica que acepta una lista separada por espacios, se espera uno de los dos formatos:

  • Ejemplo de lista separada por espacios sin comprimido: --parameterName firstValue secondValue

  • Ejemplo de lista separada por espacios entre comillas: --parameterName "firstValue" "secondValue"

Este ejemplo es una cadena con un espacio. No es una lista separada por espacios: --parameterName "firstValue secondValue"

Caracteres especiales

Hay caracteres especiales en el lenguaje de scripting de PowerShell, como en @. Para ejecutar la CLI de Azure en PowerShell, agregue ` antes del carácter especial para escaparlo. En su lugar, puede cerrar el valor entre comillas simples o dobles "/".

# 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 guion

Si el valor de un valor comienza por un guion, la CLI de Azure intenta analizarlo como si fuera un nombre de parámetro. Para analizarlo como valor, use = para concatenar el nombre y el valor del parámetro: --password="-VerySecret".

Parámetro --query

Cuando se usa el parámetro --query con un comando, se deben agregar algunos caracteres de JMESPath en el shell.

Estos tres comandos son correctos y equivalentes en Bash:

az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""

Estos son dos ejemplos de comandos incorrectos en 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 obtener más comparaciones de ejemplo entre Bash, PowerShell y Cmd, consulte Consulta de la salida del comando de la CLI de Azure.

Parámetro --debug

La mejor manera de solucionar un problema de comillas es ejecutar el comando con la marca --debug. Esta marca muestra los argumentos reales que recibe CLI de Azure en la sintaxis de Python.

Para más información sobre cómo solucionar problemas de comandos de la CLI de Azure con --debug, consulte Solución de problemas de la CLI de Azure.

Reglas del lenguaje de scripting

Estos son vínculos rápidos a las reglas del lenguaje de scripting publicadas por sus respectivas organizaciones:

Nota:

Debido a un problema conocido de PowerShell, se aplican algunas reglas de escape adicionales. Para más información, consulte Consideraciones para ejecutar la CLI de Azure en un lenguaje de scripting de PowerShell.

Consulte también

Busque muchas más comparaciones de lenguaje de scripting en estos artículos: