主題 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