web-dev-qa-db-fra.com

Concaténation d'une variable et d'un littéral de chaîne sans espace dans PowerShell

Comment puis-je écrire une variable sur la console sans espace après celle-ci? Il y a des problèmes quand j'essaie:

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

Je voudrais la sortie suivante:

Some textNOSPACES
43
M. Dudley

Une autre option et peut-être la méthode la plus canonique consiste à utiliser des accolades pour définir le nom:

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

Ceci est particulièrement utile pour les chemins, par exemple. ${ProjectDir}Bin\$Config\Images. Cependant, s'il existe un \ après le nom de la variable, cela suffit à PowerShell pour considérer que pas fait partie du nom de la variable.

56
Keith Hill

Vous devez envelopper la variable dans $ ()

Par exemple, Write-Host "$($MyVariable)NOSPACES"

20
ravikanth
Write-Host $MyVariable"NOSPACES"

Cela fonctionnera-t-il, même si cela semble très étrange ... Je choisirais:

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

Mais c'est juste moi ...

9
Massif

Vous pouvez également utiliser un tick arrière ` comme ci-dessous:

Write-Host "$MyVariable`NOSPACES"
3
mayursharma

La solution la plus simple: Write-Host $ MyVariable "NOSPACES"

1
Gavin Burke

si la vitesse compte ...

$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
0
Peter