Concatenación de cadenas de expresiones en PowerShell

Concatenación de cadenas de expresiones en PowerShell

Estoy usando una expresión ternaria como se muestra en este ejemplo:

$a = 1
$x = if ($a -eq 1) { "one" } else {"not one" }
$t = "The answer is: " + $x
write-host $t

Esto funciona como esperaba. Sin embargo, lo que me gustaría hacer en mi situación real es asignar directamente a $tsin el paso intermedio de asignar primero la expresión a $x, como si pudiera hacer esto:

$a = 1
$t = "The answer is: " + (if ($a -eq 1) { "one" } else {"not one" })
write-host $t

Sin embargo, aparece un error en la línea de asignación.

if : The term 'if' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:31
+     $t = "The answer is: " + (if ($a -eq 1) { "one" } else {"not one" ...
+                               ~~
    + CategoryInfo          : ObjectNotFound: (if:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

(Lo intenté con un sin corchetes (...): el mismo error). Claramente estoy haciendo algo mal, pero mi google-fu no ayuda hoy. Puedo ver cómo concatenarconstantes y variables, pero nada parece explicar cómo concatenar constantes y expresiones.

¿Puede indicarme la dirección correcta, por favor?

Respuesta1

Estásentoncescerca. :)

Necesitasutilizar el$para declarar el valor de retorno de la declaración como una variable.

Entonces:

$a = 1
$t = "The answer is: " + $(if ($a -eq 1) { "one" } else { "not one" })
write-host $t

O tal vez como dos líneas, utilizando Write-Hostopciones de formato:

$a = 1
write-host ("{0} {1}" -f "The answer is:", $(if ($a -eq 1) { "one" } else { "not one" }))

información relacionada