2016-04-18 3 views
6

я не могу добиться, чтобы разделить «если» условие на несколько строк в PowerShell С комментариев, смотрите пример:Как разбить «если» условие над многострочными строками с комментариями

If (# Only do that when... 
    $foo # foo 
    -and $bar # AND bar 
) 
{ 
    Write-Host foobar 
} 

Это создает следующее ошибка:

Missing closing ')' after expression in 'if' statement.

` Добавление символа не работает:

If (` # Only do that when... 
    $foo ` # foo 
    -and $bar ` # AND bar 
) 
{ 
    Write-Host foobar 
} 

я получаю:

Unexpected token '` # foo' in expression or statement.

Единственный способ я нашел, чтобы удалить комментарии:

If (` 
    $foo ` 
    -and $bar ` 
) 
{ 
    Write-Host foobar 
} 

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

+0

Я бы переместить '-and' в' $ Foo' от '$ bar'. – PetSerAl

ответ

5

PowerShell автоматически обертывает линии, когда распознает неполное утверждение. Для операций сравнения это в случае, если, например, вы пишете строку с оборванным оператором:

if (# Only do that when... 
    $foo -and # foo AND 
    $bar  # bar 
)

В противном случае PowerShell будет разбирать две строки в виде двух различных утверждений (потому что первая строка является допустимым выражением самого по себе) и fail на втором, потому что он недействителен. Таким образом, вам необходимо избежать разрыва строки.

Однако простое выполнение символа эвакуации где-то в строке не будет работать, потому что это позволит избежать следующего символа и оставить строку без изменений.


             
  
    $foo ` # foo 
  

Собирает в конце строки с (строками) комментарием также не будет работать, потому что комментарий имеет преимущество, превращая экранирующий символ в буквенный символ.


             
  
    $foo # foo` 
  

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

if (
    # Only do that when foo AND bar 
    $foo ` 
    -and $bar 
) 

или использовать блок комментарии, как @Chard предложил:

if (# Only do that when... 
    $foo  <# foo #> ` 
    -and $bar <# AND bar #> 
) 

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

1

Вы можете использовать комментарии блока <# Your Comment #> для этого.

If (<# Only do that when... #> ` 
    $foo <# foo #> ` 
    -and $bar <# AND bar #> 
) 
{ 
    Write-Host foobar 
} 
0

Это похоже на работу:

if (# Only do that when... 
    ($foo)-and # foo AND 
    ($bar)  # bar 
) 
{Write-Host 'foobar'} 
Смежные вопросы