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