Partager via


Mise en évidence des 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, comprendre les différences dans la manière dont les citations sont gérées 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 comme faisant partie 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, masquez la variable de la manière suivante : 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 l'utilisation de valeurs JSON en ligne. Par exemple, ce json est correct dans Bash et PowerShell : '{"key": "value"}'.

  • Si vous exécutez votre commande dans l'invite de commande 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 Apostrophes ou caractères d'échappement manquants Arguments de commande : ['{key:value}', '--debug']
az {"key » : « value"} --debug Apostrophes ou caractères d’échappement manquants, et espace supplémentaire Arguments de commande : ['{key:', 'value}', '--debug']

En savoir plus sur l’utilisation des valeurs de paramètres JSON dans How to use shorthand syntax with Azure CLI.

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 pour l’échapper. 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 échappés dans le shell.

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 Résultats des Commandes de Requête Azure CLI.

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 :