about_Quoting_Rules

Descrizione breve

Descrive le regole per l'uso di virgolette singole e doppie in PowerShell.

Descrizione lunga

Le virgolette vengono usate per specificare una stringa letterale. È possibile racchiudere una stringa tra virgolette singole (') o virgolette doppie (").

Le virgolette vengono usate anche per creare una stringa qui. Una stringa here è una stringa tra virgolette singole o doppie in cui le virgolette vengono interpretate letteralmente. Una stringa here può estendersi su più righe. Tutte le righe di una stringa here vengono interpretate come stringhe, anche se non sono racchiuse tra virgolette.

Nei comandi ai computer remoti, le virgolette definiscono le parti del comando che vengono eseguite nel computer remoto. In una sessione remota, le virgolette determinano anche se le variabili in un comando vengono interpretate per prime nel computer locale o nel computer remoto.

Stringhe tra virgolette doppie

Una stringa racchiusa tra virgolette doppie è una stringa espandibile . I nomi delle variabili preceduti da un segno di dollaro ($) vengono sostituiti con il valore della variabile prima che la stringa venga passata al comando per l'elaborazione.

Ad esempio:

$i = 5
"The value of $i is $i."

L'output di questo comando è:

The value of 5 is 5.

Inoltre, in una stringa tra virgolette doppie, le espressioni vengono valutate e il risultato viene inserito nella stringa. Ad esempio:

"The value of $(2+3) is 5."

L'output di questo comando è:

The value of 5 is 5.

Solo i riferimenti a variabili di base possono essere incorporati direttamente in una stringa espandibile. I riferimenti alle variabili che usano l'indicizzazione di matrici o l'accesso ai membri devono essere racchiusi in una sottoespressione. Ad esempio:

"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.2.0

Per separare un nome di variabile dai caratteri successivi nella stringa, racchiuderlo tra parentesi graffe ({}). Ciò è particolarmente importante se il nome della variabile è seguito da due punti (:). PowerShell considera tutti gli elementi tra $ e un : identificatore di ambito, causando in genere l'esito negativo dell'interpretazione. Ad esempio, "$HOME: where the heart is." genera un errore, ma "${HOME}: where the heart is." funziona come previsto.

Per impedire la sostituzione di un valore di variabile in una stringa tra virgolette doppie, usare il carattere di escape backtick (`), ovvero il carattere di escape di PowerShell.

Nell'esempio seguente il carattere backtick che precede la prima $i variabile impedisce a PowerShell di sostituire il nome della variabile con il relativo valore. Ad esempio:

$i = 5
"The value of `$i is $i."

L'output di questo comando è:

The value of $i is 5.

Stringhe tra virgolette singole

Una stringa racchiusa tra virgolette singole è una stringa verbatim . La stringa viene passata al comando esattamente durante la digitazione. Non viene eseguita alcuna sostituzione. Ad esempio:

$i = 5
'The value of $i is $i.'

L'output di questo comando è:

The value $i is $i.

Analogamente, le espressioni in stringhe con virgolette singole non vengono valutate. Vengono interpretati come valori letterali stringa. Ad esempio:

'The value of $(2+3) is 5.'

L'output di questo comando è:

The value of $(2+3) is 5.

Inclusione di caratteri virgolette in una stringa

Per fare in modo che le virgolette doppie vengano visualizzate in una stringa, racchiudere l'intera stringa tra virgolette singole. Ad esempio:

'As they say, "live and learn."'

L'output di questo comando è:

As they say, "live and learn."

È anche possibile racchiudere una stringa tra virgolette singole in una stringa tra virgolette doppie. Ad esempio:

"As they say, 'live and learn.'"

L'output di questo comando è:

As they say, 'live and learn.'

In alternativa, raddoppiare le virgolette intorno a una frase tra virgolette doppie. Ad esempio:

"As they say, ""live and learn."""

L'output di questo comando è:

As they say, "live and learn."

Per includere una virgoletta singola in una stringa tra virgolette singole, usare una seconda virgoletta singola consecutiva. Ad esempio:

'don''t'

L'output di questo comando è:

don't

Per forzare PowerShell a interpretare letteralmente le virgolette doppie, usare un carattere backtick. Ciò impedisce a PowerShell di interpretare le virgolette come delimitatore di stringa. Ad esempio:

"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'

Poiché il contenuto delle stringhe tra virgolette singole viene interpretato letteralmente, il carattere backtick viene considerato come carattere letterale e visualizzato nell'output.

Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.

Stringhe qui

Le regole delle virgolette per le stringhe here sono leggermente diverse.

Una stringa here è una stringa racchiusa tra virgolette singole o doppie racchiuse tra segni (@). Le virgolette all'interno di una stringa here vengono interpretate letteralmente.

Stringa qui:

  • si estende su più righe
  • inizia con il segno di apertura seguito da una nuova riga
  • termina con una nuova riga seguita dal segno di chiusura
  • include ogni riga tra i segni di apertura e chiusura come parte di una singola stringa

Come le stringhe regolari, le variabili vengono sostituite dai relativi valori in stringhe qui racchiuse tra virgolette doppie. Nelle stringhe con virgolette singole le variabili non vengono sostituite dai relativi valori.

È possibile usare le stringhe qui per qualsiasi testo, ma sono particolarmente utili per i tipi di testo seguenti:

  • Testo contenente virgolette letterali
  • Più righe di testo, ad esempio il testo in un blocco HTML o XML
  • Testo della Guida per uno script o un documento di funzione

Una stringa qui può avere uno dei formati seguenti, dove <Enter> rappresenta il carattere nascosto riga o nuova riga aggiunto quando si preme INVIO .

Virgolette doppie:

@"<Enter>
<string> [string] ...<Enter>
"@

Virgolette singole:

@'<Enter>
<string> [string] ...<Enter>
'@

Nota

Il carattere di nuova riga finale fa parte del segno di chiusura. Non viene aggiunto alla stringa here.It's not added to the here-string.

Una stringa qui contiene tutto il testo tra i segni di apertura e chiusura. Nella stringa here tutte le virgolette vengono interpretate letteralmente. Ad esempio:

@"
For help, type "get-help"
"@

L'output di questo comando è:

For help, type "get-help"

L'uso di una stringa here può semplificare l'uso di una stringa in un comando. Ad esempio:

@"
Use a quotation mark, like ' or ", to begin a string.
"@

L'output di questo comando è:

Use a quotation mark, like ' or ", to begin a string.

Nelle stringhe qui racchiuse tra virgolette singole, le variabili vengono interpretate letteralmente e riprodotte esattamente. Ad esempio:

@'
The $profile variable contains the path
of your PowerShell profile.
'@

L'output di questo comando è:

The $profile variable contains the path
of your PowerShell profile.

Nelle stringhe qui racchiuse tra virgolette doppie le variabili vengono sostituite dai relativi valori. Ad esempio:

@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@

L'output di questo comando è:

Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

Le stringhe qui vengono in genere usate per assegnare più righe a una variabile. Ad esempio, la stringa seguente assegna una pagina di XML alla variabile $page.

$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
        <command:name>
               Format-Table
        </command:name>
        <maml:description>
            <maml:para>Formats the output as a table.</maml:para>
        </maml:description>
        <command:verb>format</command:verb>
        <command:noun>table</command:noun>
        <dev:version></dev:version>
</command:details>
...
</command:command>
"@

Le stringhe qui sono anche un formato pratico per l'input per il ConvertFrom-StringData cmdlet, che converte le stringhe here in tabelle hash. Per ulteriori informazioni, vedere ConvertFrom-StringData.

Nota

PowerShell consente a stringhe doppie o a virgolette singole di estendersi su più righe senza usare la @ sintassi delle stringhe here. Tuttavia, la sintassi full here-string è l'utilizzo preferito.

Interpretazione di stringhe espandibili

Le stringhe espanse non hanno necessariamente lo stesso aspetto dell'output predefinito visualizzato nella console.

Le raccolte, incluse le matrici, vengono convertite in stringhe posizionando uno spazio singolo tra le rappresentazioni di stringa degli elementi. È possibile specificare un separatore diverso impostando la variabile di preferenza $OFS. Per altre informazioni, vedere la $OFS variabile di preferenza.

Le istanze di qualsiasi altro tipo vengono convertite in stringhe chiamando il ToString() metodo , che potrebbe non fornire una rappresentazione significativa. Ad esempio:

"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable

Per ottenere lo stesso output di nella console, usare una sottoespressione in cui si invia tramite pipe a Out-String. Applicare il Trim() metodo se si desidera rimuovere le righe vuote iniziali e finali.

"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name                           Value
----                           -----
key                            value

Le impostazioni cultura influiscono sull'interpretazione delle stringhe

I ToString() metodi usano le impostazioni cultura configurate correnti per convertire i valori in stringhe. Ad esempio, le impostazioni cultura della sessione di PowerShell seguente sono impostate su de-DE. Quando il ToString() metodo converte il valore di in $x una stringa, usa una virgola (,) per il separatore decimale. Inoltre, il ToString() metodo converte la data in una stringa usando il formato appropriato per le impostazioni locali tedesche.

PS> Get-Culture

LCID             Name             DisplayName
----             ----             -----------
1031             de-DE            German (Germany)

PS> $x = 1.2
PS> $x.ToString()
1,2

PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00

Tuttavia, PowerShell usa le impostazioni cultura invarianti quando si interpretano espressioni di stringa espandibili.

PS? "$x"
1.2

PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00

Passaggio di stringhe tra virgolette a comandi esterni

Alcuni comandi nativi prevedono argomenti che contengono caratteri virgolette. PowerShell interpreta la stringa tra virgolette prima di passarla al comando esterno. Questa interpretazione rimuove i caratteri tra virgolette esterne.

Per altre informazioni su questo comportamento, vedere l'articolo about_Parsing .

Vedi anche