この正確な質問が重複しているかどうかはわかりませんが、stackoverflowに関する私の特定の質問が見つからないので、そうではないと思います。
$true
はboolean型である:
($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と呼ばれるためです。あなたがC#で'true' == true
をすれば、それはcannot convert string to bool
エラーとの両方のC#を出力し、PSは、.NETに基づいており、全く同じ構文を持っている
PS C:\WINDOWS\system32> 'hello' -eq $true
False
PS C:\WINDOWS\system32> 'true' -eq $true
True
:私は他の文字列と比較した場合、異なる結果があります。どうして結果が違うのですか? これは私にとって非常に奇妙なようです。
PowerShellの評価方法は、'true'
から$true
までですか?
@Mattない正確に。彼らはすべての理由を参照してください$ true -eq '文字列' =真、私の質問はなぜ真の文字列 'true' -eq $真であり、他の '文字列' -eq $ trueはfalseです。私もあなたが望んでいるそれらの質問を見ましたが、彼らは同じではありません – SimonS
それは完全な欺瞞ではないので、私はそれを削除しました。しかし、すべての答えは、LHSとRHSの議論とキャストについて話すので、そのことが当てはまります。あなたはそれの特定の場合を指しているので、うまく動作します。関連する可能性のある他の質問を読む場合は、ここにリンクして、あなたの質問に答えなかったことを説明してください。 – Matt
@Matt私は全く同意します。答えは同じです。多分私はあまりにもショックを受けてPowerShellがこのようなものを評価するので、私は十分に慎重に答えを読まなかったでしょう。しかし、なぜ「真実」 - 「真」と答えた人にとって、この質問は完全な説明を与えてくれます。 – SimonS