Guillemets de différences entre les langages de script

Lorsque vous utilisez des commandes Azure CLI, sachez comment votre langage de script utilise des guillemets et des caractères d’échappement. Si vous prenez en charge les scripts utilisés dans différents interpréteurs de commandes, la compréhension des différences entre guillemets vous permet d’économiser de précieuses heures de développement.

Pour éviter les résultats imprévus avec des valeurs de paramètre contenant des guillemets simples ou doubles, ou des caractères d’échappement, voici quelques suggestions :

Espaces blancs et guillemets

  • Si vous fournissez une valeur de paramètre qui contient un espace blanc, encapsulez la valeur entre guillemets.

  • Dans Bash et PowerShell, si votre valeur de variable contient des guillemets simples, encapsulez la valeur entre guillemets doubles et vice versa.

  • Dans Bash, les guillemets doubles qui sont échappés sont traités comme faisant partie de la chaîne.

  • Dans l’invite de commandes Windows, les guillemets à l’intérieur des valeurs de variable sont traités dans le cadre de la valeur.

Voici quelques exemples :

# 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 sortie Bash pour les exemples corrects est la suivante :

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

Si vous souhaitez inclure les guillemets dans la sortie, échappez la variable comme suit : 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"

Chaînes JSON

  • Utilisez des guillemets simples pour conserver le contenu à l’intérieur d’une chaîne JSON. Les guillemets simples sont nécessaires lors de la spécification de valeurs JSON incluses. Par exemple, ce json est correct dans Bash et PowerShell : '{"key": "value"}'.

  • Si votre commande s’exécute sur l’invite de commandes Windows, vous devez utiliser des guillemets doubles. L’équivalent de la chaîne JSON ci-dessus dans Cmd.exe est "{"key":"value"}" .

  • Si la valeur JSON contient des guillemets doubles, vous devez les échapper.

  • Lorsque vous utilisez des valeurs de paramètre JSON, envisagez d’utiliser la @<file> convention d’Azure CLI et de contourner les mécanismes d’interprétation de l’interpréteur de commandes.

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

Voici les modèles de format JSON acceptés pour Bash, PowerShell et Cmd :

Utilisez la commande de Bash pour supprimer la sortie de clear la console entre les tests.

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

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

Les deux exemples suivants sont incorrects, car les guillemets et les espaces sont interprétés par Bash.

Format incorrect Problème Sortie de la console
az {"key":"value"} --debug Guillemets simples ou caractères d’échappement manquants Arguments de commande : ['{key:value}', '--debug']
az {"key": "value"} --debug Guillemets simples ou caractères d’échappement manquants, et espaces supplémentaires Arguments de commande : ['{key:', 'value}', '--debug']

Chaînes vides

  • Dans PowerShell, si votre valeur est une chaîne de guillemets vide (''), utilisez '""'.

  • Dans Bash ou PowerShell, si votre valeur est une chaîne de guillemets vide (''), utilisez "''".

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

Valeurs séparées par l’espace

Certaines commandes Azure CLI prennent une liste de valeurs séparées par des espaces. Si le nom de la clé ou la valeur contient des espaces, placez la paire entière entre guillemets : "my key=my value". Par exemple :

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

Quand un paramètre CLI indique qu’il accepte une liste séparée par des espaces, un des deux formats est attendu :

  • Exemple de liste séparée par un espace non cité : --parameterName firstValue secondValue

  • Exemple de liste séparée par un espace entre guillemets : --parameterName "firstValue" "secondValue"

Cet exemple est une chaîne contenant un espace. Il ne s’agit pas d’une liste séparée par des espaces: --parameterName "firstValue secondValue"

Caractères spéciaux

Il existe des caractères spéciaux dans le langage de script PowerShell, comme à @. Pour exécuter Azure CLI dans PowerShell, ajoutez ` avant le caractère spécial afin de le placer dans une séquence d’échappement. Vous pouvez aussi placer la valeur entre des guillemets simples ou doubles "/".

# 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

Caractères de trait d’union

Si la valeur d’un paramètre commence par un trait d’union, Azure CLI tente de l’analyser comme nom de paramètre. Pour l’analyser comme valeur, utilisez = pour concaténer le nom et la valeur du paramètre : --password="-VerySecret".

Paramètre --query

Quand vous utilisez le paramètre --query avec une commande, certains caractères de JMESPath doivent être placés dans une séquence d’échappement dans l’interpréteur de commandes.

Ces trois commandes sont correctes et équivalentes dans Bash :

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

Voici deux exemples de commandes incorrectes dans 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'

Pour obtenir d’autres exemples de comparaisons entre Bash, PowerShell et Cmd, consultez la sortie de commande Azure CLI de requête.

Paramètre --debug

La meilleure façon de résoudre un problème lié aux guillemets est d’exécuter la commande avec l’indicateur --debug. Cet indicateur montre les arguments réels reçus par Azure CLI dans la syntaxe Python.

Pour plus d’informations sur la résolution des problèmes liés aux commandes --debugAzure CLI, consultez Résolution des problèmes liés à Azure CLI.

Règles de langage de script

Voici des liens rapides vers des règles de langage de script publiées par leurs organisations respectives :

Remarque

En raison d’un problème connu dans PowerShell, certaines règles d’échappement supplémentaires s’appliquent. Pour plus d’informations, consultez Considérations relatives à l’exécution d’Azure CLI dans un langage de script PowerShell.

Voir aussi

Pour plus d’informations sur les comparaisons de langages de script, consultez les articles suivants :