Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Characters treated as a part of a variable name

Context:

You can expand value of variables when you write variable name in double-quoted strings like:

> $var = "123"
> Write-Host "$var"
123

Problem:

Some characters are treated as a part of a variable name, so you can’t use these characters as a separator of variables.

PS > $a = "FOO"
PS > $b = "BAR"
PS > Write-Host "! $a!$b"
PS > Write-Host "`" $a`"$b"
PS > Write-Host "# $a#$b"
PS > Write-Host "$ $a`$$b"
PS > Write-Host "% $a%$b"
PS > Write-Host "& $a&$b"
PS > Write-Host "' $a'$b"
PS > Write-Host "( $a($b"
PS > Write-Host ") $a)$b"
PS > Write-Host "* $a*$b"
PS > Write-Host "+ $a+$b"
PS > Write-Host ", $a,$b"
PS > Write-Host "- $a-$b"
PS > Write-Host ". $a.$b"
PS > Write-Host "/ $a/$b"
PS > Write-Host ": $a:$b" ... prints "BAR" in PowerShell 2.0, causes ParserError in PowerShell 6.0
PS > Write-Host "; $a;$b"
PS > Write-Host "< $a<$b"
PS > Write-Host "= $a=$b"
PS > Write-Host "> $a>$b"
PS > Write-Host "? $a?$b" ... prints only "BAR"
PS > Write-Host "@ $a@$b"
PS > Write-Host "[ $a[$b"
PS > Write-Host "\ $a\$b"
PS > Write-Host "] $a]$b"
PS > Write-Host "^ $a^$b"
PS > Write-Host "_ $a_$b" ... ofcourse prints "BAR"
PS > Write-Host "`` $a``$b"
PS > Write-Host "{ $a{$b"
PS > Write-Host "| $a|$b"
PS > Write-Host "} $a}$b"
PS > Write-Host "~ $a~$b"

Reason:

It seems by design.