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:
- Lenguaje de scripting de Bash: reglas de comillas de Bash
- Lenguaje de scripting de PowerShell: Reglas de comillas de PowerShell
- Símbolo del sistema de Windows: Procedimientos: Escape de caracteres, delimitadores y comillas en la línea de comandos de Windows
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: