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


about_Quoting_Rules

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

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

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

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

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

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

Строки с двойными кавычками

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

Например:

$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." работает должным образом.

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

В следующем примере символ backtick, предшествующий первой $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

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

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

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

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

Строки здесь

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

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

Ниже приведена строка:

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

For help, type "get-help"

Используя здесь строку, можно упростить использование строки в команде. Например:

@"
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>
"@

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

Примечание.

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

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

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

Коллекции, включая массивы, преобразуются в строки, помещая одно пространство между строковыми представлениями элементов. Другой разделитель можно указать, задав переменную $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 .

См. также