共用方式為


about_Quoting_Rules

主題
    about_Quoting_Rules

簡短描述
    說明在 Windows PowerShell 中使用單引號和雙引號的規則。


完整描述
    引號用於指定常值字串。您可以使用單引號 (') 或雙引號 (") 括住字串。
 

    引號也用於建立 here-string。here-string 是單引號或雙引號字串,當中的引號會照其原樣解
    譯。here-string 可以跨越多行, 其中的所有行都會被解譯為字串,不論是否以引號括住。


    至於傳至遠端電腦的命令,引號則是用來定義要在遠端電腦上執行的命令部分。在遠端工
    作階段中,引號也用於判斷命令中的變數是先在本機電腦還是遠端電腦上解譯。


 單引號和雙引號字串

      使用雙引號括住字串 (雙引號字串) 時,以貨幣符號 ($) 開頭的變數名稱會被取代為變數
      的值,然後字串才傳遞給命令進行處理。
 

      例如:

          $i = 5
          "$i 的值為 $i。"


      此命令的輸出為: 

          5 的值為 5。


      此外,雙引號字串中的運算式會經過評估,而結果會插入至字串中。例如:

      "$(2+3) 的值為 5。"


      此命令的輸出為:

      5 的值為 5。


      使用單引號括住字串 (單引號字串) 時,會將實際輸入的字串內容傳遞給命令。並沒有
      取代的情形發生。例如:

          $i = 5
          '$i 的值為 $i。'


      此命令的輸出為: 

          $i 的值為 $i。


      同樣的,也不會評估單引號字串中的運算式, 而會照其原樣加以解譯。例如:

      '$(2+3) 的值為 5。'


      此命令的輸出為:

      $(2+3) 的值為 5。


      如果不要雙引號字串中發生以變數值取代的情形,請使用倒引號字元 (`)(ASCII 96),這是 
      Windows PowerShell 逸出字元。


      以下範例在第一個 $i 變數前面加上倒引號字元,可防止 Windows PowerShell 將變數名稱
      取代為變數值。例如:

          $i = 5
          "`$i 的值為 $i。"


      此命令的輸出為: 

          $i 的值為 5。
     
    
      若要在字串中顯示雙引號,請以單引號括住整個字串。例如:

          '就像他們說的:"活到老學到老"。'


      此命令的輸出為:

          就像他們說的:"活到老學到老"。


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

          "就像他們說的:'活到老學到老'。"


      此命令的輸出為:

          就像他們說的:'活到老學到老'。


      或者,再以雙引號括住雙引號片語。例如:

          "就像他們說的:""活到老學到老""。"


      此命令的輸出為:

          就像他們說的:"活到老學到老"。


      若要在單引號字串中加入單引號,請使用兩個連續單引號。例如:

          'don''t'


      此命令的輸出為:

          don't


      若要強制 Windows PowerShell 照原樣解譯雙引號,請使用倒引號字元。這樣可避免 
      Windows PowerShell 將引號解譯為字串分隔符號。例如:

          "使用引號 (`") 開始字串。"


      由於單引號字串的內容會照原樣解譯,因此您不能使用倒引號字元來強制將常值字元解譯為單引號字串。

 
      例如,下列命令會產生錯誤,因為 Windows PowerShell 無法辨識逸出字元, 反而將第二
      個引號視為字串結尾。


      PS C:\> '使用引號 (`') 開始字串。'
          運算式或陳述式中有未預期的 ')' 語彙基元。
          位於第 1 行,第 27 個字元
          + '使用引號 (`') <<<< 開始字串。'


 單引號和雙引號 Here-String

      Here-string 的引號規則有點不同。


      here-string 是單引號或雙引號字串,當中的引號會照其原樣解譯。here-string 可以跨越多
      行, 其中的所有行都會被解譯為字串,不論是否以引號括住。


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

 
      您可以在 here-string 中使用任何文字,但對下列文字種類特別有用:

          - 包含常值引號的文字、多行文字 (例如 HTML 或 XML 文件中的文字)、指令碼或
            函數的說明文字


      here-string 可以具有下列其中一種格式,其中 <Enter> 代表按下 ENTER 鍵時新增的換行
      符號或新行隱藏字元。
 

      格式 1:

      @"<Enter>
          <字串> [字串] ...<Enter>
          "@


      格式 2:
 
      @'<Enter>
          <字串> [字串] ...<Enter>
          '@


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

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

      @"
      如需說明,請輸入 "get-help"
      "@

    
      此命令的輸出為:

      如需說明,請輸入 "get-help"


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

      @"
          使用引號 (') 開始字串。
          "@

        
      此命令的輸出為:

          使用引號 (') 開始字串。


      單引號 here-string 中的變數會照原樣解譯並完整重現。例如:

          @'
      $profile 變數包含
          Windows PowerShell 設定檔的路徑。
          '@


      此命令的輸出為:

      $profile 變數包含
          Windows PowerShell 設定檔的路徑。


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

      @" 
          即使您尚未建立設定檔,設定檔的路徑仍為:
          $profile。
          "@

    
      此命令的輸出為:

      即使您尚未建立設定檔,
      設定檔的路徑仍為:
      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>將輸出格式化為表格。</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_Escape_Characters
    ConvertFrom-StringData