Я не совсем уверен, является ли этот точный вопрос дубликат, но я не мог найти свой конкретный вопрос о stackoverflow, так что, я думаю, это не так.
$true
является логическим типом:
($true).getType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Boolean System.ValueType
'true'
является строкой:
('true').gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
почему это условие верно?
PS C:\WINDOWS\system32> if ('True' -eq $true) {'yes'} else {'no'}
yes
только потому, что строка называется True так же, как логическая истина? Если сравнивать его с любой другой строкой, есть другой результат:
PS C:\WINDOWS\system32> 'hello' -eq $true
False
PS C:\WINDOWS\system32> 'true' -eq $true
True
если вы 'true' == true
в C# он печатает cannot convert string to bool
ошибку и как C# и PS основаны на .net и имеют достаточно один и тот же синтаксис. почему есть другой результат? Мне это кажется очень странным.
Как оценивается PowerShell 'true'
по $true
?
@ Matt не совсем.все они ссылаются на то, что это $ true -eq 'string' = true, поэтому мой вопрос - это точная строка «true» -eq $ true, а любая другая «string» -eq $ true - false. Я также видел те вопросы, которые вы указали, но они не то же самое. – SimonS
Я удалил его, так как это не идеальный обман. Однако все ответы говорят о аргументах LHS и RHS и о том, что они применяются. Вы имеете в виду конкретный случай, поэтому он отлично работает. Если вы прочтете другие вопросы, которые могут быть связаны, вы должны связать их здесь и попытаться объяснить, что они не ответили на ваш вопрос. – Matt
@Matt Я полностью согласен. ответ тот же. может быть, я был просто шокирован тем, что PowerShell оценивает такие вещи, чтобы я не читал ответы достаточно внимательно ;-). Тем не менее, для тех, кто ищет ответ на вопрос «почему это« истина »-eq $ true, этот вопрос дает прекрасное объяснение сейчас. – SimonS