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 .
См. также
PowerShell