1

Согласно Powershell " о правилах цитирования ":

Здесь строка - это строка в одинарных или двойных кавычках, в которой кавычки интерпретируются буквально.

Однако следующая строка приводит к исключению TerminatorExpectedAtEndOfString в Powershell версии 5.0 (сборка 10586, редакция 117). В версии Powershell 2.0 он работает как положено:

$herestr=@"
'"'
"@
Write-Host $herestr

Если я процитирую последнюю одинарную кавычку с обратным символом (`), строка здесь работает как ожидается, как в версии 2.0, так и в 5.0.

$herestr=@"
'"`'
"@
Write-Host $herestr

Почему мне нужно экранировать последнюю одинарную кавычку в строке здесь?

1 ответ1

1

Я считаю, что это ошибка в анализаторе PowerShell. Похоже, когда он находится в режиме синтаксического анализа оператора, он сначала пытается интерпретировать как строковый литерал BareWord . И если это не удалось, то это приведет к ошибке. Вы можете обойти это, поставив дополнительное пространство перед или после знака равенства:

$herestr =@"
'"'
"@

или же

$herestr= @"
'"'
"@

Или с помощью круглых скобок:

[void]($herestr=@"
'"'
"@)

Обратите внимание: поскольку скобки не являются присваиванием или увеличением / уменьшением, они будут записывать результат выражения в конвейер, в отличие от простого выражения присваивания, поэтому вам необходимо явно игнорировать его с помощью [void] или любого другого метода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .