Condividi tramite


Differenze tra le virgolette tra i linguaggi di scripting

Quando si usano i comandi dell'interfaccia della riga di comando di Azure, tenere presente come il linguaggio di scripting usa le virgolette e i caratteri di escape. Se si supportano script usati in shell diverse, la comprensione delle differenze tra virgolette consente di risparmiare tempo prezioso per lo sviluppo.

Per evitare risultati imprevisti con valori di parametro contenenti virgolette singole o doppie o caratteri di escape, ecco alcuni suggerimenti:

Spazi vuoti e virgolette

  • Se si specifica un valore di parametro contenente spazi vuoti, eseguire il wrapping del valore tra virgolette.

  • In Bash e PowerShell, se il valore della variabile contiene virgolette singole, racchiudere il valore tra virgolette doppie e viceversa.

  • In Bash le virgolette doppie con carattere di escape vengono considerate come parte della stringa.

  • Nel prompt dei comandi di Windows le virgolette all'interno dei valori delle variabili vengono considerate come parte del valore.

Ecco alcuni esempi:

# 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

L'output Bash per gli esempi corretti è il seguente:

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

Se si desidera includere le virgolette nell'output, eseguire l'escape della variabile come segue: 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"

Stringhe JSON

  • Usare virgolette singole per mantenere il contenuto all'interno di una stringa JSON. Le virgolette singole sono necessarie quando si specificano valori JSON inline. Ad esempio, questo codice JSON è corretto sia in Bash che in PowerShell: '{"key": "value"}'.

  • Se il comando viene eseguito al prompt dei comandi di Windows, è necessario usare virgolette doppie. L'equivalente della stringa JSON precedente in Cmd.exe è "{"key":"value"}" .

  • Se il valore JSON contiene virgolette doppie, è necessario eseguirne l'escape.

  • Quando si usano i valori dei parametri JSON, è consigliabile usare la convenzione dell'interfaccia della riga di comando di @<file> Azure e ignorare i meccanismi di interpretazione della shell.

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

Ecco i modelli di formato JSON accettati per Bash, PowerShell e Cmd:

Usare il comando di Bash per rimuovere l'output della clear console tra i test.

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

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

Questi due esempi successivi non sono corretti come virgolette e spazi vengono interpretati da Bash.

Formato non corretto Problema Output console
az {"key":"value"} --debug Virgolette singole o caratteri di escape mancanti Argomenti del comando: ['{key:value}', '--debug']
az {"key": "value"} --debug Virgolette singole o caratteri di escape mancanti e contiene spazio aggiuntivo Argomenti del comando: ['{key:', 'value}', '--debug']

Stringhe vuote

  • In PowerShell, se il valore è una stringa di virgolette vuote (''), usare '""'.

  • In Bash o PowerShell, se il valore è una stringa di virgolette vuote (''), usare "''".

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

Valori separati da spazi

Alcuni comandi dell'interfaccia della riga di comando di Azure accettano un elenco di valori separati da spazi. Se il nome o il valore della chiave contiene spazi, eseguire il wrapping dell'intera coppia: "my key=my value". Ad esempio:

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

Quando un parametro dell'interfaccia della riga di comando indica che accetta un elenco separato da spazi, è previsto uno dei due formati seguenti:

  • Esempio di elenco senza virgoole e separate da spazi: --parameterName firstValue secondValue

  • Esempio di elenco delimitato da spazi tra virgolette: --parameterName "firstValue" "secondValue"

Questo esempio è una stringa con uno spazio in esso contenuto. Non è un elenco separato da spazi: --parameterName "firstValue secondValue"

Caratteri speciali

Nel linguaggio di scripting di PowerShell sono presenti caratteri speciali, ad esempio in @. Per eseguire l'interfaccia della riga di comando di Azure in PowerShell, aggiungere ` prima del carattere speciale per eseguirne l'escape. È anche possibile racchiudere il valore tra virgolette "/"singole o doppie.

# 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

Caratteri trattini

Se il valore di un parametro inizia con un trattino, l'interfaccia della riga di comando di Azure tenta di analizzarla come nome di parametro. Per analizzarlo come valore, usare = per concatenare il nome e il valore del parametro: --password="-VerySecret".

Parametro --query

Quando si usa il --query parametro con un comando, alcuni caratteri di JMESPath devono essere preceduti da un carattere di escape nella shell.

Questi tre comandi sono corretti ed equivalenti in Bash:

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

Ecco due esempi di comandi non corretti in 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'

Per altri confronti di esempio tra Bash, PowerShell e Cmd, vedere Eseguire query nell'output dei comandi dell'interfaccia della riga di comando di Azure.

Parametro --debug

Il modo migliore per risolvere un problema di virgolette consiste nell'eseguire il comando con il --debug flag . Questo flag rivela gli argomenti effettivi ricevuti dall'interfaccia della riga di comando di Azure nella sintassi di Python.

Per altre informazioni sulla risoluzione dei problemi relativi ai comandi dell'interfaccia della riga di comando di Azure con --debug, vedere Risoluzione dei problemi dell'interfaccia della riga di comando di Azure.

Regole del linguaggio di scripting

Ecco i collegamenti rapidi alle regole del linguaggio di scripting pubblicate dalle rispettive organizzazioni:

Nota

A causa di un problema noto in PowerShell, si applicano alcune regole di escape aggiuntive. Per altre informazioni, vedere Considerazioni sull'esecuzione dell'interfaccia della riga di comando di Azure in un linguaggio di scripting di PowerShell.

Vedi anche

Altri confronti tra linguaggi di scripting sono disponibili in questi articoli: