Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Краткое описание
Описывает правила использования однократных и двойных кавычек в PowerShell.
Длинное описание
При синтаксическом анализе PowerShell сначала выполняет интерпретацию входных данных как выражения. Но при обнаружении вызова команды синтаксический анализ продолжается в режиме аргумента. Нечисловые аргументы без кавычки обрабатываются как строки. Если у вас есть аргументы, содержащие пробелы, такие как пути, необходимо заключить эти значения аргументов в кавычки. Дополнительные сведения о синтаксическом анализе аргументов см. в разделе режима аргументов about_Parsing.
Кавычки используются для указания литеральной строки. Можно заключить строку в одинарные кавычки (') или двойные кавычки (").
Кавычки также используются для создания строковых. Строка здесь — это строка с одним кавычками или двойной кавычки, в которой кавычки интерпретируются буквально. Строка здесь может охватывать несколько строк. Все строки в строке здесь интерпретируются как строки, даже если они не заключены в кавычки.
В командах для удаленных компьютеров кавычки определяют части команды, выполняемой на удаленном компьютере. В удаленном сеансе кавычки также определяют, интерпретируются ли переменные в команде сначала на локальном компьютере или на удаленном компьютере.
Заметка
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.6.0-preview.4
Чтобы разделить имя переменной от последующих символов в строке, заключите ее в фигурные скобки ({}). Это особенно важно, если за именем переменной следует двоеточие (:). 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.
Так как PowerShell интерпретирует смарт-кавычки, например ‘, ’, “и ”, как обычные кавычки, смарт-кавычки также необходимо экранировать.
Например:
"Double ““smart quotation marks`” must be escaped in a double-quoted string."
'Single ‘‘smart quotation marks’’ must be escaped in a single-quoted string.'
Double “smart quotation marks” must be escaped in a double-quoted string.
Single ‘smart quotation marks’ must be escaped in a single-quoted 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