1

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

$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 ответ1

2

Ты так близко. :)

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

Так:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .