Почему `if (Test-Path…)` действительно работает?

В PowerShell синтаксис для , есливыглядит следующим образом:

if (<test1>)
    {<statement list 1>}
[elseif (<test2>)
    {<statement list 2>}]
[else
    {<statement list 3>}]

Другое синтаксическое правило состоит в том, что для подвыражений , вам нужно использовать круглые скобкиследующим образом:

 write-output (get-date)

Таким образом, при объединении этих двух правил я ожидаю, что проверка для некоторого пути должна быть написана с двумя наборами круглых скобок следующим образом:

if ((Test-Path ...)) {
    # do something
}

Однако это также работает:

if (Test-Path ...) {
    # do something
}

и просто для полноты, это неработает:

if (!Test-Path ...) {
    # do something
}

(здесь вам нужно будет, как обычно, заключить подвыражение в круглые скобки).

Может ли кто-нибудь объяснить правила синтаксиса, которые применяются здесь, и почему я могу использовать тест ЕСЛИ только с одной скобкой? Это какая-то магия PowerShell или я неправильно понимаю основные правила синтаксиса?

7
задан Borek Bernard 12 April 2012 в 12:35
поделиться