Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

PowerShell і лапки.

Строкові значення в PowerShell зустрічаються досить часто. Як правило, вони передаються командам як аргументи. Іноді рядки полягають в подвійні або одинарні лапки, а іноді обходяться без них. Неправильно поставлені (або не поставлені) лапки є причиною безлічі помилок в коді, тому дуже важливо пам'ятати правила роботи з лапками: коли текст треба брати в лапки, коли немає і коли який тип лапок краще використовувати.

Для початку подивимося, що дає нам використання лапок. Як приклад призначимо змінної $ a значення 123 і виведемо її тип даних:

$ a = 123
$ a.GetType ()

Потім зробимо те ж саме, тільки значення змінної укладемо в лапки:

$ a = "123"
$ a.GetType ()

в першому випадку змінна має тип даних Int32 (32-розрядне число) , а в другому String (рядок).



З прикладу видно, що наявність лапок однозначно вказує на те, що об'єкт має тип String. Іншими словами, коли текст полягає в лапки, PowerShell розглядає його як рядок.

Треба сказати, що PowerShell і сам вміє визначати тип даних. Так якщо значення складається з одних цифр, то об'єкт визначається як числовий, якщо ж в значенні міститься хоча б одна буква, то PowerShell визначає об'єкт як рядок, незалежно від наявності \ відсутності лапок.

В більшості випадків лапки можна не ставити, якщо аргумент вдає із себе рядок без пробілів. Для прикладу змінимо поточну директорію командою:

Set-Location C: \ Windows

Хоча шлях до директорії вказано без лапок, проте команда успішно виконана. А ось така команда обов'язково викличе помилку:

Set-Location C: \ Documents and Settings

Справа в тому, що для інтерпретатора пробіл означає завершення команди, тому наступне за пропуском слово and визначається як параметр.Оскільки параметра з таким ім'ям у командлет Set-Location немає, генерується помилка. Проблема вирішується просто, достатньо шлях взяти в лапки, наприклад так:

Set-Location 'C: \ Documents and Settings'



З призначенням лапок більш-менш розібралися, переходимо до їх типам.

В PowerShell можна використовувати два типи лапок - одинарні та подвійні. У більшості випадків не важливо, який тип використовувати. Для прикладу візьмемо дві змінних і дамо їм однакове значення. У змінної $ a значення помістимо в подвійні лапки, а у $ b в одинарні:

$ a = "Текст в лапках"
$ b = 'Текст в лапках'

Вивівши вміст обох змінних, отримаємо однаковий результат.



Як бачите, для виділення звичайного тексту, що не містить будь-яких спеціальних символів або змінних, підійде будь-який тип лапок. Однак є кілька ситуацій, коли тип лапок має значення.

В тексті міститься змінна

Якщо в рядок, укладену в лапки, треба вставити значення змінної, то необхідно використовувати подвійні лапки.При використанні одинарних лапок все, що знаходиться всередині лапок обробляється як тест, незалежно від вмісту. Тільки при наявності подвійних лапок PowerShell шукає всередині тексту знак $ і підставляє замість імені змінної її значення. Наприклад:

$ c = 'рядок'
$ a = "$ c в лапках"
$ b = '$ c в лапках'

Якщо тепер вивести значення змінних $ a і $ b, то в першому випадку буде виведено значення змінної, а в другому її ім'я.



Додавання спеціальних символів

Тільки подвійні лапки дають можливість використовувати спеціальні символи у тексті. У тексті, обмеженому подвійними лапками, PowerShell шукає керуючий символ - зворотний одинарні лапки ( `) і виконує наступний за нею спец.символ.

Примітка. Вивести список спец. символів можна командою Get-Help about_special_characters.

Як приклад спробуємо відформатувати текст, вставивши в нього символ n (перенесення рядки):

$ a = "` n Рядок 1 `n Рядок 2 `n Рядок 3` n "
$ a = '` n Рядок 1 `n Рядок 2` n Рядок 3 `n'

Як бачите, спец.символи в подвійних лапках оброблені правильно, а в одинарних просто виведені на екран.



Лапки в лапках

іноді може знадобитися виділити текст всередині лапок. Але використовувати один тип лапок двічі не вийде, наприклад при спробі створити змінну ми отримаємо помилку:

$ a = 'Лапки' всередині 'лапок'

а командлет Write-Output не видасть помилку , але додасть після першої пари лапок перенесення рядка:

Write-Output 'Лапки' всередині 'лапок'



Тому, якщо потрібно використовувати лапки в рядку, то доведеться їх комбінувати - додавати подвійні лапки всередині одинарних або одинарні всередині подвійних:

$ a = 'лапки "всередині" лапок'
$ b = "Лапки 'всередині' лапок"



При роботі зі змінними треба пам'ятати, що для PowerShell значення має тільки зовнішня пара лапок.Наприклад так ми отримаємо тільки ім'я змінної:

$ c = 'всередині'
$ a = 'Лапки "$ c" лапок'

а ось так її значення:

$ a = "Лапки '$ c' лапок"



І знов говорив про лапках, варто згадати про таку річ як екранування. Спеціальний символ (лапки, знак $ тощо.), Наступний за зворотною лапками ( `), екранується - сприймається не як спеціальний, а як звичайний строковий символ. Тому при використанні лапок усередині лапок внутрішню пару лапок можна екранувати:

$ a = "Лапки` "внутрі`" лапок "

Тоді вони будуть виведені як звичайний текст.



Екранування працює тільки з подвійними лапками. При спробі екранувати символи в рядку, укладені в одинарні лапки, керуючий символ ніяк не вплине на вихідні дані.

.