variable definir concatenate concatenar powershell string-concatenation

definir - ¿Cómo concatenar cadenas y variables en PowerShell?



powershell add character to variable (16)

Supongamos que tengo el siguiente fragmento de código:

$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?


Aquí hay otra forma como alternativa:

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


Concatenar cadenas como en los días de DOS. Este es un gran problema para el registro, así que aquí tienes:

$strDate = Get-Date $strday = "$($strDate.Year)$($strDate.Month)$($strDate.Day)" Write-Output "$($strDate.Year)$($strDate.Month)$($strDate.Day)" Write-Output $strday



Debe colocar la expresión entre paréntesis para evitar que se traten como parámetros diferentes del cmdlet:

Write-host ($assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner)


Intente envolver lo que quiera imprimir entre paréntesis:

Write-host ($assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner)

Su código se interpreta como muchos parámetros que se pasan a Write-Host . Envolviéndolo entre paréntesis concatenará los valores y luego pasará el valor resultante como un solo parámetro.


Mientras expresión:

"string1" + "string2" + "string3"

Se concatenarán las cuerdas. Debe poner un $ delante del paréntesis para que se evalúe como un solo argumento cuando se pasa a un comando de powershell. Ejemplo:

Write-Host $( "string1" + "string2" + "string3" )

Como beneficio adicional, si desea que abarque varias líneas, debe usar la sintaxis de acento hacia atrás al final de la línea (sin espacios ni caracteres a la derecha del acento). Ejemplo:

Write-Host $(` "The rain in " +` "Spain falls mainly " +` "in the plains" )` -ForegroundColor Yellow

(En realidad, creo que Powershell actualmente está implementado un poco mal, ya que requiere de interferencias innecesarias entre paréntesis. Si Microsoft simplemente siguiera las reglas de paréntesis de "Python" o "TCL" de permitirle poner tantas líneas nuevas como quiera entre comenzar y al final del paréntesis, resolverían la mayoría de los problemas que a las personas no les gustan acerca de powershell relacionados con la continuación de la línea y la concatenación de cadenas. Descubrí que a veces se pueden dejar las marcas en las continuaciones de línea entre paréntesis, pero realmente desagradable e impredecible si funcionará ... es mejor simplemente agregar los backticks.)


Nadie parece haber mencionado la diferencia entre comillas simples y dobles. (Estoy usando PowerShell 4).

Puedes hacer esto (como dijo @Ben):

$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 para el literal, genera la cadena exactamente como esta, por favor. Las comillas dobles son para cuando desea realizar un preprocesamiento (como variables, caracteres especiales, etc.)

Asi que:

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

Mientras:

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

( http://ss64.com/ps/syntax-esc.html Encuentro bueno como referencia).


Otra opción es:

$string = $assoc.ID $string += " - " $string += $assoc.Name $string += " - " $string += $assoc.Owner Write-Host $string

El "mejor" método es probablemente el que CB sugirió:

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


Para concatenar dos cadenas para almacenar en una variable / uso en una función, puede usar -join.

P.ej

$name = -join("Jo", "h", "n");

Asignaría "John" a $ nombre.

Así que para dar salida, en una sola línea:

Write-Host (-join("Jo", "h", "n"))


Parece que tengo problemas con esto (y muchas otras cosas no intuitivas) cada vez que uso PowerShell después de un tiempo alejado de él, por lo que ahora opto por:

[string]::Concat("There are ", $count, " items in the list")


Prueba esto:

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


Solo quiero traer otra forma de hacerlo usando .NET String.Format :

$name = "Slim Shady" Write-Host ([string]::Format("My name is {0}", $name))


Todas estas respuestas parecen muy complicadas. Si está utilizando esto en un script de PowerShell, simplemente puede hacer esto:

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

Saldrá

Mi nombre es Slim Shady

Observa cómo se pone un espacio entre las palabras para ti.


Una forma es:

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

Otra 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


Write-Host puede concatenar así también:

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

Esta es la forma más sencilla, en mi humilde opinión.