Главная

Thursday, 1 September 2022

Закавыка в Powershell.


Всем привет.

В процессе написания кода был вынужден еще раз вернуться к... кавычкам в 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

А что вы думаете по этому поводу?