【问题标题】:Concatenating a variable and a string literal without a space in PowerShell在PowerShell中连接一个变量和一个没有空格的字符串文字
【发布时间】:2011-07-05 20:56:09
【问题描述】:

如何将变量写入控制台,后面没有空格?尝试时出现问题:

$MyVariable = "Some text"
Write-Host "$MyVariableNOSPACES"

我想要以下输出:

Some textNOSPACES

【问题讨论】:

  • 是的,对于所有取消/装箱快捷方式 Powershell cough “启用”,您会认为,除非您有一个名为 $MyVariableN 的变量(或其他冲突) PS会弄清楚你的意思。没有骰子。

标签: string powershell


【解决方案1】:

另一种选择,可能是更规范的方式是使用花括号来描述名称:

$MyVariable = "Some text"
Write-Host "${MyVariable}NOSPACES"

这对于路径特别方便,例如${ProjectDir}Bin\$Config\Images。但是,如果变量名后面有一个\,则足以让 PowerShell 认为 不是 变量名的一部分。

【讨论】:

  • 我怎么写这个:Write-Host "\\"$pc[$i]?在没有空格的变量之前我需要 2 个反斜杠。此解决方案在第二个反斜杠和 var 值之间有一个空格。应该有一个类似 -nonewlilne 的参数用于空格。
【解决方案2】:

你需要将变量包装在$()中

例如,Write-Host "$($MyVariable)NOSPACES"

【讨论】:

  • 在我的测试中,这在变量和字符串文字之间放置了一个空格。
  • 这是我看到的:$MyVariable = "Some text" Write-Host "$($MyVariable)NOSPACES" Some textNOSPACES
  • 怎么了? imgur.com/a/eLmBtlg 检查。变量文本和字符串文字之间没有空格。
  • 最终,我发现我通过不正确的语法插入了空格,但首先我跳到了 Keith 的答案上——但它没有用。如果 $MyVariable 包含一个字符串,则它可以工作,但如果它包含一个具有存储字符串的属性的对象,则它不起作用; ${ObjectVariable.SomeProperty} 解析为空这个答案也适用于对象属性。
【解决方案3】:
Write-Host $MyVariable"NOSPACES"

会工作,虽然它看起来很奇怪......我会去:

Write-Host ("{0}NOSPACES" -f $MyVariable)

但那只是我......

【讨论】:

  • 我总是更喜欢第二种选择。我也以为只有我 :-)
【解决方案4】:

您也可以使用反引号`,如下所示:

Write-Host "$MyVariable`NOSPACES"

【讨论】:

  • 这个变种的一个优点是它也可以在从脚本执行的命令中工作(不像${MyVariable}$($MyVariable)
  • 这个变体还有一个缺点,如果反引号后面的字符匹配special character,它会插入那个特殊字符(例如"$MyVariable`nospaces")。
【解决方案5】:

$Variable1 ='www.google.co.in/'

$Variable2 ='图片'

写输出($Variable1+$Variable2)

【讨论】:

  • 进一步的问题,这是连接 2 个变量而没有空格的另一种简单方法。如上例所示放置两个变量,输出将是“www.google.co.in/images”
【解决方案6】:

最简单的解决方案:Write-Host $MyVariable"NOSPACES"

【讨论】:

  • 它有效,但 PowerShell 不允许您在变量和字符串文字之间插入多个空格。
  • 你为什么不把空格移到字符串文字? Write-Host $MyVariable" NOSPACES"?
  • $MyVariable = "x"... $MyVariable"NOSPACES" --> x NOSPACES. <-- inserts a space. This works --> ($MyVariable"NOSPACES")`
【解决方案7】:

如果速度很重要...

$MyVariable = "Some text"

# slow:
(measure-command {foreach ($i in 1..1MB) {
    $x = "$($MyVariable)NOSPACE"
}}).TotalMilliseconds

# faster:
(measure-command {foreach ($i in 1..1MB) {
    $x = "$MyVariable`NOSPACE"
}}).TotalMilliseconds

# even faster:
(measure-command {foreach ($i in 1..1MB) {
    $x = [string]::Concat($MyVariable, "NOSPACE")
}}).TotalMilliseconds

# fastest:
(measure-command {foreach ($i in 1..1MB) {
    $x = $MyVariable + "NOSPACE"
}}).TotalMilliseconds

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 2017-05-09
    • 2020-06-07
    • 2019-05-20
    • 2013-02-13
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多