Estou usando uma expressão ternária conforme mostrado neste exemplo:
$a = 1
$x = if ($a -eq 1) { "one" } else {"not one" }
$t = "The answer is: " + $x
write-host $t
Isso funciona como eu esperaria. O que eu gostaria de fazer na minha situação real é atribuir diretamente a $t
sem a etapa intermediária de primeiro atribuir a expressão a $x
, como se eu pudesse fazer isso:
$a = 1
$t = "The answer is: " + (if ($a -eq 1) { "one" } else {"not one" })
write-host $t
No entanto, recebo um erro na linha de atribuição,
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
(Tentei sem colchetes (...)
: mesmo erro.) Claramente estou fazendo algo errado, mas meu google-fu não está ajudando hoje. Eu posso ver como concatenarconstantes e variáveis, mas nada parece explicar como concatenar constantes e expressões.
Você pode me indicar a direção certa, por favor?
Responder1
Você éentãofechar. :)
Você precisause o$
para declarar o valor de retorno da instrução como uma variável.
Então:
$a = 1
$t = "The answer is: " + $(if ($a -eq 1) { "one" } else { "not one" })
write-host $t
Ou talvez como duas linhas, utilizando o Write-Hostopções de formatação:
$a = 1
write-host ("{0} {1}" -f "The answer is:", $(if ($a -eq 1) { "one" } else { "not one" }))