Condividi tramite


about_Quoting_Rules

Breve descrizione

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

Descrizione lunga

Le virgolette vengono utilizzate 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 racchiusa tra virgolette singole o virgolette 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 per i 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 con 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 $ l'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 evitare 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 di 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 a 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 a 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 di 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 a virgolette singole viene interpretato letteralmente, il carattere di backtick viene considerato come un carattere letterale e visualizzato nell'output.

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

Stringhe di seguito

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

Analogamente alle stringhe regolari, le variabili vengono sostituite dai relativi valori in stringhe con 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 che contiene 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 here può avere uno dei formati seguenti, dove <Enter> rappresenta il carattere nascosto di avanzamento riga o nuova riga che viene 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.

Una stringa here contiene tutto il testo tra i segni di apertura e di 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 di questo tipo vengono in genere usate per assegnare più righe a una variabile. Ad esempio, la stringa qui 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 di seguito sono anche un formato pratico per l'input nel ConvertFrom-StringData cmdlet, che converte le stringhe here in tabelle hash. Per altre informazioni, vedere ConvertFrom-StringData.

Nota

PowerShell consente alle stringhe a virgolette doppie o singole di estendersi su più righe senza usare la @ sintassi delle stringhe here. Tuttavia, la sintassi di stringa qui completa è 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 un singolo spazio 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 della console, usare una sottoespressione in cui si esegue la 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 di virgoletta esterna.

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

Vedi anche