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