一直困扰我的简单问题:在powershell中,我可以这样定义字符串:
$s1 = "Boogety boo"
或
$s2 = '.net rocks'
对口译员来说有区别吗?
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版本,但原理还是一样的)
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
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`等),请使用双引号。
$myVariable
$($myList -join ', ')
r`、
、``t
3条答案
按热度按时间cwdobuhd1#
双引号允许变量扩展,而单引号不允许:
来源:http://www.techotopia.com/index.php/Windows_PowerShell_1.0_String_Quoting_and_Escape_Sequences
(我知道1.0版本,但原理还是一样的)
fhity93d2#
我不是想给出一个更好的答案,只是换一种说法。
撇号和引号之间的变量扩展与UNIX shell(sh、ksh、bash)中的相同。使用撇号将按原样获取字符串,而不处理任何转义。
am46iovg3#
在PowerShell文档的about_Quoting_Rules文章中可以直接回答此问题:
双引号字符串
用双引号括起来的字符串是 expandable 字符串。在将字符串传递给命令进行处理之前,前面带有美元符号(
$
)的变量名将替换为变量值。例如:
此命令的输出为:
单引号字符串
用单引号引起来的字符串是 verbatim 字符串。该字符串将按照您键入的原样传递给命令。不执行任何替换。例如:
此命令的输出为:
换句话说,如果您希望字符串保持原样,请使用单引号。如果您希望插入变量(
$myVariable
)、命令执行和其他计算的结果($($myList -join ', ')
)或特殊字符(r`、
n、``t
、``a`等),请使用双引号。