Concatenating a variable and a string literal without a space in PowerShell
StringPowershellString Problem Overview
How can I write a variable to the console without a space after it? There are problems when I try:
$MyVariable = "Some text"
Write-Host "$MyVariableNOSPACES"
I'd like the following output:
Some textNOSPACES
String Solutions
Solution 1 - String
Another option and possibly the more canonical way is to use curly braces to delineate the name:
$MyVariable = "Some text"
Write-Host "${MyVariable}NOSPACES"
This is particular handy for paths e.g. ${ProjectDir}Bin\$Config\Images
. However, if there is a \
after the variable name, that is enough for PowerShell to consider that not part of the variable name.
Solution 2 - String
You need to wrap the variable in $()
For example, Write-Host "$($MyVariable)NOSPACES"
Solution 3 - String
Write-Host $MyVariable"NOSPACES"
Will work, although it looks very odd... I'd go for:
Write-Host ("{0}NOSPACES" -f $MyVariable)
But that's just me...
Solution 4 - String
You can also use a back tick `
as below:
Write-Host "$MyVariable`NOSPACES"
Solution 5 - String
Solution 6 - String
Easiest solution: Write-Host $MyVariable"NOSPACES"
Solution 7 - String
if speed matters...
$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