Read-Host
всегда выводит строку .
Чтобы обработать вывод как число , вы должны явно преобразовать его в один :
$a = Read-Host "What is your name?"
[int] $b = Read-Host "Enter a 2 digit number"
[int] $c = Read-Host "Enter a 3 digit number"
Указанные выше ограничения типа переменные $b
и $c
вцелочисленные значения (помещая [int]
приведение к влево целевой переменной в присваивании), которое автоматически преобразует Read-Host
'[string]
вывод в [int]
.
Что касается того, что вы пытались :
За исключением -
, все операторы, используемые в вашем коде, имеют перегрузок для конкретной строки (смысл) ;обратите внимание, что для LHS достаточно иметь тип [string]
, чтобы вызвать это поведение. [1]
-lt
/ -ge
выполнить лексическое сравнение со строками;например, '10' -gt '2'
возвращает $false
, поскольку в лексической сортировке строка '10'
стоит перед строкой '2'
.
-and
/ -or
Treat пустые строки как $false
и любые непустые строки как $true
;Например,
'0' -and '0'
- это $true
, потому что '0'
- непустая строка.
+
выполняет объединение строк ;например, '1' + '0'
- это '10'
.
*
выполняет репликацию строки ;например, '1' * 3
- это '111'
- LHS повторяется столько раз, сколько указано числом на RHS;обратите внимание, что '1' * '3'
работает так же, потому что RHS приводится к [int]
в этом случае.
-
является единственным исключением : это всегда выполняет числовую операцию, если это возможно;например, '10' - '2'
приводит к 8
, поскольку оба операнда были неявно преобразованы в [int]
с.
[1] Как правило, это LHSоперация, которая определяет тип данных, в результате чего RHS будет приведен к соответствующему типу, если это необходимо.