Concatenação de expressões em concha Powershell de expressões

1

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

(Eu tentei com um sem os parênteses (...) : mesmo erro.) Claramente estou fazendo algo errado, mas o meu google-fu não está ajudando hoje. Eu posso ver como concatenar constantes and variáveis , mas nada parece explicar como concatenar constantes e expressões.

Você pode me apontar na direção certa, por favor?

    
por roaima 30.09.2015 / 18:29

1 resposta

2

Você está para fechar. :)

Você precisa usar o $ para declarar o valor de retorno da declaraçã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 as opções de formatação do Escreva-Host :

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