Поделиться через


about_Quoting_Rules

Краткое описание

Описывает правила использования одинарных и двойных кавычек в PowerShell.

Подробное описание

Кавычки используются для указания литеральной строки. Строку можно заключать в одинарные кавычки (') или двойные кавычки (").

Кавычки также используются для создания строки here. Строка здесь — это строка в одинарных или двойных кавычках, в которой кавычки интерпретируются буквально. Строка here может охватывать несколько строк. Все строки в строке here интерпретируются как строки, даже если они не заключены в кавычки.

В командах для удаленных компьютеров в кавычках определяются части команды, выполняемые на удаленном компьютере. В удаленном сеансе кавычки также определяют, интерпретируются ли переменные в команде сначала на локальном компьютере или на удаленном компьютере.

Строки, заключенные в двойные кавычки

Строка, заключенная в двойные кавычки, является расширяемой строкой . Имена переменных, которым предшествует знак доллара ($), заменяются значением переменной перед передачей строки в команду для обработки.

Пример:

$i = 5
"The value of $i is $i."

Выходные данные этой команды:

The value of 5 is 5.

Кроме того, в строке с двойными кавычками вычисляются выражения, а результат вставляется в строку. Пример:

"The value of $(2+3) is 5."

Выходные данные этой команды:

The value of 5 is 5.

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

"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.2.0

Чтобы отделить имя переменной от последующих символов в строке, заключите его в фигурные скобки ({}). Это особенно важно, если за именем переменной следует двоеточие (:). PowerShell учитывает все данные между $ и : описателем область, что обычно приводит к сбою интерпретации. Например, "$HOME: where the heart is." выдает ошибку, но "${HOME}: where the heart is." работает должным образом.

Чтобы предотвратить подстановку значения переменной в строке с двойными кавычками, используйте символ обратного выражения (`), который является escape-символом PowerShell.

В следующем примере символ обратного выражения, предшествующий первой $i переменной, не позволяет PowerShell заменить имя переменной ее значением. Пример:

$i = 5
"The value of `$i is $i."

Выходные данные этой команды:

The value of $i is 5.

Строки в одинарных кавычках

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

$i = 5
'The value of $i is $i.'

Выходные данные этой команды:

The value $i is $i.

Аналогичным образом выражения в строках с одними кавычками не вычисляются. Они интерпретируются как строковые литералы. Пример:

'The value of $(2+3) is 5.'

Выходные данные этой команды:

The value of $(2+3) is 5.

Включение символов кавычек в строку

Чтобы двойные кавычки отображались в строке, заключите всю строку в одинарные кавычки. Пример:

'As they say, "live and learn."'

Выходные данные этой команды:

As they say, "live and learn."

Можно также заключить строку в одинарные кавычки в строку с двойными кавычками. Пример:

"As they say, 'live and learn.'"

Выходные данные этой команды:

As they say, 'live and learn.'

Или удвоите кавычки вокруг фразы, включаемой в двойные кавычки. Пример:

"As they say, ""live and learn."""

Выходные данные этой команды:

As they say, "live and learn."

Чтобы включить одинарные кавычки в строку с одним кавычками, используйте вторую последовательную одинарную кавычку. Пример:

'don''t'

Выходные данные этой команды:

don't

Чтобы заставить PowerShell интерпретировать двойные кавычки буквально, используйте символ обратногоtick. Это не позволит PowerShell интерпретировать кавычки как разделитель строки. Пример:

"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'

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

Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.

Here-strings

Правила кавычек для строк here-string немного отличаются.

Строка здесь — это строка в одинарных или двойных кавычках, заключенная в знаки (@). Кавычки в строке здесь интерпретируются буквально.

Строка здесь:

  • охватывает несколько строк
  • начинается с открывающей метки, за которой следует новая строка
  • заканчивается новой строкой, за которой следует закрывающий знак
  • включает каждую строку между открывающей и закрывающей метками в составе одной строки.

Как и обычные строки, переменные заменяются своими значениями в строках here-string в двойных кавычках. В строках с одними кавычками переменные не заменяются своими значениями.

Строки here-string можно использовать для любого текста, но они особенно полезны для следующих типов текста:

  • Текст, содержащий литеральные кавычки
  • Несколько строк текста, например текст в блоке HTML или XML
  • Текст справки для документа скрипта или функции

Строка here-string может иметь любой из следующих форматов, где <Enter> представляет скрытый символ перевода строки или новой строки, который добавляется при нажатии клавиши ВВОД .

Двойные кавычки:

@"<Enter>
<string> [string] ...<Enter>
"@

Одинарные кавычки:

@'<Enter>
<string> [string] ...<Enter>
'@

Примечание

Последний символ новой строки является частью закрывающего знака. Он не добавляется в строку here-string.

Строка here содержит весь текст между открывающей и закрывающей метками. В строке here-string все кавычки интерпретируются буквально. Пример:

@"
For help, type "get-help"
"@

Выходные данные этой команды:

For help, type "get-help"

Использование строки here-string может упростить использование строки в команде. Пример:

@"
Use a quotation mark, like ' or ", to begin a string.
"@

Выходные данные этой команды:

Use a quotation mark, like ' or ", to begin a string.

В строках с одними кавычками переменные интерпретируются буквально и в точности воспроизводятся. Пример:

@'
The $profile variable contains the path
of your PowerShell profile.
'@

Выходные данные этой команды:

The $profile variable contains the path
of your PowerShell profile.

В строках с двойными кавычками переменные заменяются их значениями. Пример:

@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@

Выходные данные этой команды:

Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

Строки здесь обычно используются для назначения переменной нескольких строк. Например, следующая строка здесь назначает страницу XML переменной $page.

$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
        <command:name>
               Format-Table
        </command:name>
        <maml:description>
            <maml:para>Formats the output as a table.</maml:para>
        </maml:description>
        <command:verb>format</command:verb>
        <command:noun>table</command:noun>
        <dev:version></dev:version>
</command:details>
...
</command:command>
"@

Строки here также являются удобным форматом для ввода в ConvertFrom-StringData командлет, который преобразует here-strings в хэш-таблицы. Для получения дополнительной информации см. ConvertFrom-StringData.

Примечание

PowerShell позволяет строкам в двух или одинарных кавычках охватывать несколько строк без использования @ синтаксиса строк here-strings. Однако предпочтительнее использовать полный синтаксис строки here.

Интерпретация расширяемых строк

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

Коллекции, включая массивы, преобразуются в строки путем размещения одного пробела между строковыми представлениями элементов. Другой разделитель можно указать, задав переменную $OFSпредпочтения . Дополнительные сведения см. в $OFS разделе Переменная предпочтения.

Экземпляры любого другого типа преобразуются в строки путем вызова ToString() метода , который может не дать понятного представления. Пример:

"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable

Чтобы получить те же выходные данные, что и в консоли, используйте часть выражения, в которой передается в Out-String. Примените метод , Trim() если вы хотите удалить все начальные и конечные пустые строки.

"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name                           Value
----                           -----
key                            value

Параметры языка и региональных параметров влияют на интерпретацию строк

Методы ToString() используют текущие настроенные параметры языка и региональных параметров для преобразования значений в строки. Например, язык и региональные параметры для следующего сеанса PowerShell имеет значение de-DE. ToString() Когда метод преобразует значение $x в строку, он использует запятую (,) для десятичного разделителя. Кроме того, ToString() метод преобразует дату в строку, используя соответствующий формат для немецких языковых параметров.

PS> Get-Culture

LCID             Name             DisplayName
----             ----             -----------
1031             de-DE            German (Germany)

PS> $x = 1.2
PS> $x.ToString()
1,2

PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00

Однако PowerShell использует инвариантный язык и региональные параметры при интерпретации расширяемых строковых выражений.

PS? "$x"
1.2

PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00

Передача строк с кавычками во внешние команды

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

Дополнительные сведения об этом поведении см. в статье about_Parsing .

См. также раздел