Всем привет.
В процессе написания кода был вынужден еще раз вернуться к... кавычкам в Powershell.
Итак, одинарными кавычками ' ' в Powershell выделяют нерасширяемые строки. В таких строках не действуют escape-последовательности и не происходит подстановка значений переменных.
Двойные кавычки " " используются для создания расширяемых строк. Если внутри такой строки встречается имя переменной или другое выражение, которое может быть вычислено, то в строку подставляется значение данной переменной или результат вычисления выражения. Также в расширяемых строках действуют escape-последовательности. Например, если в переменной $name хранится слово ’’Иван”, то в переменной $hello = "Привет, $паше! `n" будет записана строка ’Привет, Иван!’ и символ перевода строки.
Знак ` (обратный апостроф или гравис) является в PowerShell экранирующим символом. Внутри строки в двойных кавычках обратный апостроф задает escape-последовательность (например, `n означает перевод строки). Использова ние его перед пробелом внутри параметров команды позволяет не указывать кавычки для путей к файлам или каталогам, содержащим пробелы (например, cd C:\Program Files). Если обратный апостроф является последним символом в командной строке, то ввод команды продолжается со следующей строки (это позволяет выполнять в PowerShell многострочные команды). По сути гравис не является кавычкой как таковой, но его укажем тоже.
Ок, а теперь наглядные примеры по всем трем видам:
Clear-Host
Write-Host '1)'
Write-Host "String text"
Write-Host 'String text'
Результат работы скрипта:
1)
String text
String text
$var = 1057 # объявим переменную и занесем в нее числовое значение, равное 1057
Write-Host '2)'
Write-Host "$var" # в двойных кавычках символ $ интерпретируется как специальный
Write-Host '$var' # в одинарных кавычках символ $ интерпретируется как текст
Результат работы скрипта:
2)
1057
$var
Write-Host '3)'
Write-Host '"$var"' # двойные кавычки внутри одинарных интерпретируются как текст
Write-Host "'$var'" # точно также интерпретируются и одинарные кавычки внутри двойных
Результат работы скрипта:
3)
"$var"
'1057'
Write-Host '4)'
Write-Host 'somestring ''quotes into quotes''' # если внутри одинарных кавычек нам нужно поставить еще одинарные кавычки, интерпретируемые как текст, можно воспользоваться двумя подряд символами одинарных кавычек
Write-Host "somestring ""quotes into quotes""" # по аналогии и с двойными кавычками
Результат работы скрипта:
4)
somestring 'quotes into quotes'
somestring "quotes into quotes"
Write-Host '5)'
Write-Host "somestring `"quotes into quotes`"" # обратная кавычка экранировала двойную. Такой способ не работает с одинарными кавычками
Write-Host "`$var = $var" # с помощью обратной кавычки мы экранировали специальный символ $
Результат работы скрипта:
5)
somestring "quotes into quotes"
$var = 1057
Write-Host '6)'
Get-Process -Name svchost `
| Sort-Object -Property id `
| Select-Object -First 3 `
| Format-Table -Property id,name -AutoSize -Wrap # также, с помощью обратной кавычки, можно разбивать однострочный командлет на несколько строк для удобства чтения кода. По сути, таким образом, экранируется символ перехода на новую строку.
Результат работы скрипта:
6)
Id Name
-- ----
920 svchost
1256 svchost
1328 svchost
Успехов.
No comments:
Post a Comment
А что вы думаете по этому поводу?