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 $t
sin 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" }))