在powershell中定义字符串时,单引号和双引号有什么区别

r3i60tvu  于 2023-03-12  发布在  Shell
关注(0)|答案(3)|浏览(139)

一直困扰我的简单问题:在powershell中,我可以这样定义字符串:

$s1 = "Boogety boo"

$s2 = '.net rocks'

对口译员来说有区别吗?

cwdobuhd

cwdobuhd1#

双引号允许变量扩展,而单引号不允许:

PS C:\Users\Administrator> $mycolor="red"
PS C:\Users\Administrator> write-output -inputobject 'My favorite color is $mycolor'
My favorite color is $mycolor

来源:http://www.techotopia.com/index.php/Windows_PowerShell_1.0_String_Quoting_and_Escape_Sequences
(我知道1.0版本,但原理还是一样的)

fhity93d

fhity93d2#

我不是想给出一个更好的答案,只是换一种说法。
撇号和引号之间的变量扩展与UNIX shell(sh、ksh、bash)中的相同。使用撇号将按原样获取字符串,而不处理任何转义。

PS C:\Users\lit> $x = "`t"
PS C:\Users\lit> $x

PS C:\Users\lit> Write-Output "now${x}is"
now     is
PS C:\Users\lit> $x = '`t'
PS C:\Users\lit> $x
`t
PS C:\Users\lit> Write-Output "now${x}is"
now`tis
PS C:\Users\lit> $word = "easy"
PS C:\Users\lit> "PowerShell is $word"
PowerShell is easy
PS C:\Users\lit> 'PowerShell is $word'
PowerShell is $word
am46iovg

am46iovg3#

在PowerShell文档的about_Quoting_Rules文章中可以直接回答此问题:

双引号字符串

用双引号括起来的字符串是 expandable 字符串。在将字符串传递给命令进行处理之前,前面带有美元符号($)的变量名将替换为变量值。
例如:

$i = 5
"The value of $i is $i."

此命令的输出为:

The value of 5 is 5.

单引号字符串

用单引号引起来的字符串是 verbatim 字符串。该字符串将按照您键入的原样传递给命令。不执行任何替换。例如:

$i = 5
'The value of $i is $i.'

此命令的输出为:

The value of $i is $i.

换句话说,如果您希望字符串保持原样,请使用单引号。如果您希望插入变量($myVariable)、命令执行和其他计算的结果($($myList -join ', '))或特殊字符(r`、n、``t、``a`等),请使用双引号。

相关问题