¿Cómo concateno cadenas y variables en PowerShell?

Resuelto Ninja Cowgirl asked hace 11 años • 22 respuestas

Supongamos que tengo el siguiente fragmento:

$assoc = New-Object PSObject -Property @{
    Id = 42
    Name = "Slim Shady"
    Owner = "Eminem"
}

Write-Host $assoc.Id + "  -  "  + $assoc.Name + "  -  " + $assoc.Owner

Espero que este fragmento muestre:

42 - Slim Shady - Eminem

Pero en cambio muestra:

42 + - + Slim Shady + - + Eminem

Lo que me hace pensar que el +operador no es apropiado para concatenar cadenas y variables.

¿Cómo debería abordar esto con PowerShell?

Ninja Cowgirl avatar Feb 27 '13 20:02 Ninja Cowgirl
Aceptado
Write-Host "$($assoc.Id) - $($assoc.Name) - $($assoc.Owner)"

Consulte la especificación del lenguaje de Windows PowerShell versión 3.0 , p25, expansión de subexpresiones.

David Brabant avatar Feb 27 '2013 13:02 David Brabant

Existe una diferencia entre comillas simples y dobles. (Estoy usando PowerShell 4).

Puedes hacer esto (como dijo Benjamín ):

$name = 'Slim Shady'
Write-Host 'My name is'$name
-> My name is Slim Shady

O puedes hacer esto:

$name = 'Slim Shady'
Write-Host "My name is $name"
-> My name is Slim Shady

Las comillas simples son literales, genere la cadena exactamente así, por favor. Las comillas dobles son para cuando desea realizar algún procesamiento previo (como variables, caracteres especiales, etc.)

Entonces:

$name = "Marshall Bruce Mathers III"
Write-Host "$name"
-> Marshall Bruce Mathers III

Mientras que:

$name = "Marshall Bruce Mathers III"
Write-Host '$name'
-> $name

(Creo que el Procedimiento: caracteres de escape, delimitadores y comillas es bueno como referencia).

TinyRacoon avatar Sep 08 '2015 10:09 TinyRacoon

También puedes usar-join

P.ej

$var = -join("Hello", " ", "world");

Asignaría "Hola mundo" a $var.

Entonces para generar, en una línea:

Write-Host (-join("Hello", " ", "world"))
manyways avatar Jan 11 '2016 11:01 manyways

Una forma es:

Write-Host "$($assoc.Id)  -  $($assoc.Name)  -  $($assoc.Owner)"

Otro es:

Write-Host  ("{0}  -  {1}  -  {2}" -f $assoc.Id,$assoc.Name,$assoc.Owner )

O simplemente (pero no me gusta ;) ):

Write-Host $assoc.Id  "  -  "   $assoc.Name  "  -  "  $assoc.Owner
CB. avatar Feb 27 '2013 13:02 CB.