PowerShell で "`0" -eq '' は Trueになる。

PowerShellで"`0"とすると1文字のNULL(0x0)の文字列になる。
だから、"`0"の長さは 1 である。たとえば、こんな感じ:
PS C:\Users\Public\Documents> "`0".Length
1
PS C:\Users\Public\Documents>

いっぽう、'' の長さは 0 である。たとえば、こんな感じ:
PS C:\Users\Public\Documents> ''.Length
0
PS C:\Users\Public\Documents>

そこで、”‘0" と '' が同じかどうか比較すると、こんな感じ:
PS C:\Users\Public\Documents> "`0" -eq ''
True
PS C:\Users\Public\Documents>

まぎらわしい。ついでに 0 -eq '' とか比較すると、さらにこんな感じで:
PS C:\Users\Public\Documents> 0 -eq ''
True
PS C:\Users\Public\Documents>

もっと、まぎらわしい。
ちなみに $null と '' は同じではないらしい:
PS C:\Users\Public\Documents> $null -eq ''
False
PS C:\Users\Public\Documents>

とはいえ、$null.length も ''.Length も 0 である
PS C:\Users\Public\Documents> $null -eq ''; ''.Length
0
0
PS C:\Users\Public\Documents>

そんなわけで、空文字列かどうかを正確に把握したい場合は、Length が 0 かどうかしらべるのが無難かもしれない。
PS C:\Users\Public\Documents> $a=''
PS C:\Users\Public\Documents> $a.Length -eq 0
True
PS C:\Users\Public\Documents>

以下、広告:
Windows PowerShellでキーボード操作を自動化しよう: Windows10/PowerShell5.0対応 - 辛島信芳
Windows PowerShellでキーボード操作を自動化しよう: Windows10/PowerShell5.0対応 - 辛島信芳

この記事へのコメント

この記事へのトラックバック