¿Cómo concateno cadenas y variables en PowerShell?
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?
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.
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).
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"))
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