共用方式為


about_Quoting_Rules

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0

主題

about_Quoting_Rules

簡短描述

描述在 Windows PowerShell® 中使用單引號與雙引號的規則。

詳細描述

引號用來指定常值字串。您可以將字串括在單引號 (') 或雙引號 (") 中。

引號內也可用來建立 here-string。Here-string 可以是單引號或雙引號字串,而引號中的字串會逐字解譯。Here-string 可以跨越多行。在 here-string 中所有的行雖然不以引號括住,但都會解譯為字串。

在給遠端電腦的命令中,引號能定義在遠端電腦上執行命令的組件。在遠端工作階段中,引號也能決定命令中的變數是先在本機電腦上解譯,或在遠端電腦上解譯。

單引號與雙引號字串

當您將字串括在雙引號內 (雙引號字串) 時,在字串傳遞至命令進行處理之前,前方加上錢幣符號 ($) 的變數名稱會被取代為該變數的值。

例如:

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

這個命令的輸出為:

        The value of 5 is 5.

此外,在雙引號字串中,運算式會受到評估且結果會插入字串中。例如:

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

這個命令的輸出為:

        The value of 5 is 5.

當您將字串括在單引號中 (單引號字串) 時,字串會完全按照您的輸入傳遞至命令。不執行任何替代。例如:

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

這個命令的輸出為:

        The value $i is $i.

同樣地,單引號字串中的運算式不會受到評估。它們會被解譯為常值。例如:

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

這個命令的輸出為:

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

若要避免雙引號字串中的變數值替代,請使用倒單引號字元 (') (ASCII 96),即 Windows PowerShell 逸出字元。

在下列範例中,第一個 $i 變數之前的倒單引號字元可防止 Windows PowerShell 變數名稱被其值取代。例如:

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

這個命令的輸出為:

        The value $i is 5.

若要讓雙引號出現在字串中,請用單引號括住整個字串。例如:

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

這個命令的輸出為:

        As they say, "live and learn."

您也可以將單引號字串括在雙引號字串中。例如:

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

這個命令的輸出為:

        As they say, 'live and learn.'

或用兩個引號括住雙引號片語。例如:

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

這個命令的輸出為:

        As they say, "live and learn."

若要在單引號字串中包含單引號,請使用第二個連續的單引號。例如:

        'don''t'

這個命令的輸出為:

        don't

若要強制 Windows PowerShell 逐字解譯雙引號,請使用倒單引號字元。這可防止 Windows PowerShell 將引號解譯為字串分隔符號。例如:

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

由於單引號字串的內容為逐字解譯,因此您無法使用倒單引號字元來強制解譯單引號字串中的常值字元。

例如,由於 Windows PowerShell 無法辨識逸出字元,因此下列命令會產生錯誤。相反地,它會將第二個引號解譯為字串的結尾。

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

HERE-STRINGS

引號規則用在 here-string 時會稍有不同。

Here-string 可以是單引號或雙引號字串,而引號中的字串會逐字解譯。Here-string 可以跨越多行。在 here-string 中所有的行都會被解譯成字串,即使它們不被引號括住。

與一般的字串相同,變數會被雙引號 here-string 的值取代。在單引號 here-string 中,變數不會被其值取代。

您可以針對任何文字使用 here-string,但其特別適用於下列種類的文字:

  • -- 包含常值引號的文字

  • -- 多行文字,例如 HTML 或 XML 文件中的文字

  • -- 指令碼或 function 的說明文字

Here-string 可以具有下列任一格式,其中 <Enter> 代表在您按下 ENTER 鍵時所加入的換行或新行隱藏字元。

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

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

在任一格式中,右雙引號都必須是行中的第一個字元。

Here-string 包含兩個隱藏字元之間的所有文字。在 here-string 中,所有的引號都會逐字解譯。例如:

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

這個命令的輸出為:

        For help, type "get-help"

使用 here-string 可以簡化在命令中使用字串的過程。例如:

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

這個命令的輸出為:

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

在單引號 here-string 中,變數為逐字解譯並完全重製。例如:

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

這個命令的輸出為:

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

在雙引號 here-string 中,其值會取代變數。例如:

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

這個命令的輸出為:

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

Here-string 通常用於將多行指派至變數。例如,下列 here-string 會將 XML 的一個頁面指派給 $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>
        "@

Here-string 對於 ConvertFrom-StringData Cmdlet 來說也是一種方便的輸入格式,其會將 here-string 轉換為雜湊資料表。如需詳細資訊,請參閱 ConvertFrom-StringData。

關鍵字

about_Here-Strings

about_Quotes

about_Quotation_Marks

另請參閱

about_Escape_Characters

ConvertFrom-StringData