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 .