about_Quoting_Rules

Aggiornamento: maggio 2014

Si applica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

ARGOMENTO

about_Quoting_Rules

DESCRIZIONE BREVE

Descrive le regole per l'utilizzo di virgolette singole e doppie in Windows 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 here. Una stringa here è una stringa di 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 per i computer remoti, le virgolette definiscono le parti del comando eseguite sul computer remoto. In una sessione remota, le virgolette determinano anche se le variabili di un comando vengono interpretate prima nel computer locale o nel computer remoto.

STRINGHE CON VIRGOLETTE SINGOLE E DOPPIE

Quando una stringa viene racchiusa tra virgolette doppie (una stringa tra virgolette doppie), 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."

Ecco 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."

Ecco l'output di questo comando:

        The value of 5 is 5.

Quando si racchiude una stringa tra virgolette singole (una stringa tra virgolette singole), la stringa viene passata al comando esattamente come è stato digitato. Non viene eseguita alcuna sostituzione. Ad esempio:

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

Ecco l'output di questo comando:

        The value $i is $i.

Allo stesso modo, non vengono valutate le espressioni nelle stringhe tra virgolette singole. Vengono interpretate come valori letterali. Ad esempio:

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

Ecco l'output di questo comando:

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

Per evitare la sostituzione del valore di una variabile in una stringa tra virgolette doppie, usare il carattere apice inverso (`) (ASCII 96), ovvero il carattere di escape Windows PowerShell.

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

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

Ecco l'output di questo comando:

        The value $i is 5.

Per visualizzare le virgolette doppie in una stringa, racchiudere l'intera stringa tra virgolette singole. Ad esempio:

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

Ecco 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.'"

Ecco l'output di questo comando:

        As they say, 'live and learn.'

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

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

Ecco 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'

Ecco l'output di questo comando:

        don't

Per forzare Windows PowerShell a interpretare letteralmente un segno di virgolette doppie, usare un carattere di apice inverso. In tal modo si impedisce a Windows PowerShell di interpretare le virgolette come delimitatori di stringa. Ad esempio:

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

Poiché il contenuto delle stringhe tra virgolette singole viene interpretato letteralmente, non è possibile usare il carattere apice inverso per forzare un'interpretazione carattere letterale in una stringa tra virgolette singole.

Ad esempio, il comando seguente genera un errore perché Windows PowerShell non riconosce il carattere di escape. Al contrario, interpreta la seconda virgoletta come fine della stringa.

        PS C:\> 'Use a quotation mark (`') to begin a string.'
        Unexpected token ')' in expression or statement.
        At line:1 char:27
        + 'Use a quotation mark (`') <<<<  to begin a string.'

STRINGHE HERE

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

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

Come stringhe regolari, le variabili sono sostituite dai relativi valori nelle stringhe here tra virgolette doppie. Nelle stringhe here tra virgolette singole, le variabili non vengono sostituite con i relativi valori.

È possibile usare le stringhe here 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 documento HTML o XML

  • -- Il testo della Guida per uno script o una funzione

Una stringa here può avere uno dei formati seguenti, dove <Enter> rappresenta il carattere di avanzamento riga o un carattere nascosto di nuova riga che viene aggiunto quando si preme INVIO.

     Double-quotes:
        @"<Enter>
        <string> [string] ...<Enter>
        "@

    Single-quotes:
        @'<Enter>
        <string> [string] ...<Enter>
        '@

A prescindere dal formato, la virgoletta di chiusura deve essere il primo carattere nella riga.

Una stringa here contiene tutto il testo tra i due caratteri nascosti. Nella stringa here, tutte le virgolette doppie vengono interpretate letteralmente. Ad esempio:

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

Ecco l'output di questo comando:

        For help, type "get-help"

Usando una stringa here è possibile semplificare una stringa in un comando. Ad esempio:

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

Ecco l'output di questo comando:

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

Nelle stringhe here tra virgolette singole, le variabili vengono interpretate letteralmente e riprodotte con esattezza. Ad esempio:

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

Ecco l'output di questo comando:

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

Nelle stringhe here tra virgolette doppie, le variabili vengono sostituite con i relativi valori. Ad esempio:

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

Ecco l'output di questo comando:

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

In genere le stringhe here vengono usate per assegnare più righe a una variabile. Ad esempio, la stringa here seguente assegna una pagina di codice XML alla variabile $page.

        $page = [XML] @"
        <command:command xmlns:maml="https://schemas.microsoft.com/maml/2004/10"
        xmlns:command="https://schemas.microsoft.com/maml/dev/command/2004/10" 
        xmlns:dev="https://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 here sono anche un formato comodo per l'input del cmdlet ConvertFrom-StringData, che converte le stringhe here in tabelle hash. Per altre informazioni, vedere ConvertFrom-StringData.

PAROLE CHIAVE

about_Here-Strings

about_Quotes

about_Quotation_Marks

VEDERE ANCHE

about_Escape_Characters

ConvertFrom-StringData