Я использую троичное выражение, как показано в этом примере:
$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" }))