2014-08-28 1 views
3

Рассмотрим следующие утверждения:Использование скобок для нескольких логических операций

Get-ChildItem -Recurse *.vbs | Where-Object{$_.name -like "d*" -and $_.name -like "*s"} 
Get-ChildItem -Recurse *.vbs | Where-Object{($_.name -like "d*") -and ($_.name -like "*s")} 

Они будут производить тот же вывод. Я всегда предполагал, что первое утверждение потерпит неудачу, поскольку условия не были в круглых скобках.

Ознакомиться с about_Logical_Operators примерами для -and и -or показаны эти круглые скобки.

(1 -eq 1) -or (1 -eq 2) 

Но чистая статья технологии для Using the Where-Object Cmdlet показывает этот пример

$_.handles -gt 200 -and $_.name -eq "svchost" 

Некоторое время я говорил людям использовать скобки, потому что «в противном случае он не будет работать». Является ли разница чисто косметической и в конечном итоге не имеет значения, и я просто подталкиваю свои личные предпочтения?

ответ

2

Если вы посмотрите на Windows PowerShell 3.0 Specification document, он говорит, что это в разделе 7.10 (логические операторы):

Логическое И оператор -И преобразует значения, назначенные его операндами к BOOL, при необходимости (§6.2). Результатом является логический И возможных значений операнда и имеет тип bool. Если левый операнд оценивает значение False, правый операнд не оценивается. Оператор логического ИЛИ - или преобразует значения, назначенные его операндами , в случае необходимости (b.26). Результатом является логическое ИЛИ возможно преобразованных значений операндов и имеет тип bool. Если левый операнд оценивает значение True, то правый операнд не оценивается. Оператор логического XOR -xor преобразует значения, обозначенные его операндами , для bool (§6.2). Результатом является логическое XOR, возможно, преобразованных значений операнда, возможно, и имеет тип bool.

Эти операторы являются ассоциативными.

Таким образом, это определяет правила для добавления (или не) круглых скобок.

+0

Мое перемещение этого текста заключается в том, что он оценивает то, что слева, а затем справа, если требуется, независимо от наличия скобок. Это точка, которую я должен получить? – Matt

+0

Да. Логическое выражение оценивается слева направо, и вы несете ответственность за размещение круглых скобок, если оценка по умолчанию не соответствует ожидаемому. –