about_Quoting_Rules

简短说明

描述在 PowerShell 中使用单引号和双引号的规则。

长说明

引号用于指定文本字符串。 可以用单引号将字符串括起来 (') 或双引号 (") 。

引号还用于创建 此处字符串。 此处-字符串是用单引号或双引号括起来的字符串,其中的引号按原义解释。 此处的字符串可以跨多个行。 此处字符串中的所有行都被解释为字符串,即使它们没有用引号引起来。

在远程计算机的命令中,引号定义在远程计算机上运行的命令的各个部分。 在远程会话中,引号还确定命令中的变量是在本地计算机上还是在远程计算机上首先解释。

单引号和双引号字符串

用双引号引起来的字符串是一个 可扩展 字符串。 前面带有美元符号 () 的变量名称 $ 将替换为该变量的值,然后将该字符串传递到命令进行处理。

例如:

$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) ,这是 PowerShell 转义字符。

在下面的示例中,第一个变量前的反号字符阻止 PowerShell 将变量 $i 名称替换为其值。 例如:

$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

若要强制 PowerShell 逐字解释双引号,请使用反引号字符。 这可以防止 PowerShell 将引号解释为字符串分隔符。 例如:

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

由于单引号字符串的内容按字面解释,因此反引号字符被视为文本字符并显示在输出中。

Here-strings

here 字符串的引号规则略有不同。

此处-字符串是用单引号或双引号括起来的字符串,其中的引号按原义解释。 此处的字符串可以跨多个行。 此处字符串中的所有行都被解释为字符串,即使它们没有用引号引起来。

与规则字符串一样,变量在此处用双引号引起来。 在此处使用单引号的字符串中,变量的值不会被替换。

对于任何文本,您可以使用此处的字符串,但对于以下类型的文本特别有用:

  • 包含文本引号的文本
  • 多行文本,如 HTML 或 XML 中的文本
  • 脚本或函数文档的帮助文本

此处的字符串可以采用以下两种格式之一,其中 <Enter> 表示按下 enter 键时添加的换行符或换行符。

双引号:

@"<Enter>
<string> [string] ...<Enter>
"@

单引号:

@'<Enter>
<string> [string] ...<Enter>
'@

无论采用哪种格式,右引号都必须是行中的第一个字符。

此处-字符串包含两个隐藏字符之间的所有文本。 在此处字符串中,所有引号都按原义解释。 例如:

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

此命令的输出为:

For help, type "get-help"

使用此处字符串可简化在命令中使用字符串的情况。 例如:

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

此命令的输出为:

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

在此处用单引号括起来的字符串中,变量按原义解释和重现。 例如:

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

此命令的输出为:

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

在双引号的 here-strings 中,变量将替换为其值。 例如:

@"
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\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

此处字符串通常用于为变量分配多行。 例如,以下 here-string 将 XML 页分配给 $page 变量。

$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://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-strings 也是输入到 cmdlet 的便捷格式,它将 ConvertFrom-StringData here-strings 转换为哈希表。 有关详细信息,请参阅 ConvertFrom-StringData

请参阅

about_Special_Characters

ConvertFrom-StringData