Почему -подобный оператор в Powershell работает без подстановочных знаков? - PullRequest
0 голосов
/ 17 апреля 2020

Насколько я знаю, этот оператор работает только с подстановочным синтаксисом, но почему в этом случае он действительно сработал?

PS C:\Users\Danie\Pictures> Get-ChildItem | Where-Object {$_.Extension -Like ".jpg"}
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         4/3/2020      1:55        1253954 16009807808_f3f4709393_k.jpg

1 Ответ

1 голос
/ 17 апреля 2020

Это работает, потому что значение свойства Extension в вашем случае равно точно .jpg.

Как Lee_Dailey упоминает , используя -like без каких-либо подстановочные знаки в вашем шаблоне функционально эквивалентны $string -eq $pattern.


Зачем тогда использовать -like? *

В вашем случае функциональной разницы нет, поскольку Extension уже введите [string] - но - это одна веская причина для использования -like сверх -eq при сравнении строк - и это то, что -like выполняет только сравнение строк , что означает что вы можете гарантировать, что оба операнда обрабатываются как строки.

При -eq выполняемое сравнение полностью зависит от типа левого операнда (или lhs ) операнда :

PS C:\> $null -eq ""  # $null is not a string
False
PS C:\> $null -like ""  # But -like attempts to convert $null to [string], we get an empty one
True

Это относится к любому типу операнда, а не только $null:

PS C:\> (Get-Item C:\Windows) -eq 'C:\Windows'    # [System.IO.DirectoryInfo] is also not [string]
False
PS C:\> (Get-Item C:\Windows) -like 'C:\Windows'  # But `-like` treats it as one
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...