Конкатенация строк выражений в Powershell

Конкатенация строк выражений в Powershell

Я использую троичное выражение, как показано в этом примере:

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

Это работает так, как я и ожидал. Однако в моей реальной ситуации я хотел бы присвоить значение напрямую $tбез промежуточного шага предварительного присвоения выражения $x, как если бы я мог сделать это:

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

Однако я получаю сообщение об ошибке в строке задания,

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

(Я пробовал с и без скобок (...): та же ошибка.) Очевидно, я делаю что-то не так, но мой гугл-фу сегодня не помогает. Я вижу, как объединитьконстанты и переменные, но, похоже, ничего не объясняет, как объединять константы и выражения.

Можете ли вы указать мне правильное направление, пожалуйста?

решение1

Вытакзакрывать. :)

Вам нужноиспользовать$для объявления возвращаемого значения оператора как переменной.

Так:

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

Или, возможно, в виде двух строк, используя Write-Hostпараметры форматирования:

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

Связанный контент