Основы форматирования в PowerShell – Hey, Scripting Guy! Blog

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об основах форматирования строк в Windows PowerShell.

Знакомимся с композитным форматированием в Windows PowerShell

Windows PowerShell позволяет вам воспользоваться функционалом композитного форматирования .NET Framework. При его использовании в качестве входных данных указываются набор объектов и строка, определяющая формат. Эта строка состоит из индексированных заполнителей, которые называются элементами форматирования (format items). Выходная строка содержит в себе текст и строковую интерпретацию объектов списка.

Методы композитного форматирования

Существует несколько методов, позволяющих использовать композитное форматирование. Кроме того, существует множество типов композитного форматирования.

Заметка: Более подробное рассмотрение темы композитного форматирования вы можете найти в статье Composite Formatting на MSDN.

Пример 1. Используем статический метод Format

Класс .NET Framework System.String обладает статическим методом Format, который поддерживает использование композитного форматирования. Следующий пример иллюстрирует его использование.

PS C:\> [string]$name = ‘Scripting Guy’

PS C:\> [string]::Format(«Name = {0}»,$name)

Name = Scripting Guy

Пример 2. Используем оператор Format

Тех же самых результатов я могу добиться и с помощью оператора форматирования Windows PowerShell –f.

PS C:\> [string]$name = ‘Scripting Guy’

PS C:\> «Name = {0}» -f $name

Name = Scripting Guy

Пример 3. Подставляем переменную в строку

В этом случае мне вовсе не обязательно использовать композитное форматирование, потому как Windows PowerShell позволяет мне просто указать имя переменной в строке и при выводе эта переменная будет заменена на содержащееся в ней значение.

PS C:\> [string]$name = ‘Scripting Guy’

PS C:\> «Name = $name»

Name = Scripting Guy

Рассмотрим эти три примера более пристально

Все три команды возвращают нам одну и тот же результат — строку “Name = Scripting Guy”. И какую же из использовать? Если смотреть с точки зрения простоты использования, оператор –f (пример 2) представляется мне наиболее сложным. За ним идет статический метод Format (пример 1). Наиболее понятным мне кажется третий пример – использование переменной в строке.

Но даже в отношении третьего варианта я не могу сказать, что его использование полностью интуитивно, поскольку его поведение может быть непредсказуемо в некоторых случаях. Также он не сработает при использовании строк, помещенных в одинарные кавычки. В более сложных примерах использования, код может стать довольно сложным, что повышает вероятность возникновения ошибок. В общем, для использования в подобных примерах, где нам нужно вставить в строку значение одной или двух переменных – этот вариант вполне подходит. Но для более сложных выражений я бы предпочел использование композитного форматирования. Так что давайте поговорим о нем более подробно.

Как работает композитное форматирование?

Варианты использования композитного форматирования приведены в первых двух примерах. “{0}” – это элемент форматирования с индексом 0. Индекс является обязательным. Иногда его также называют определителем параметра (parameter specifier). Индекс всегда начинается с 0 и соответствует номеру объекта в списке. Таким образом, определитель параметра с индексом 0 соответствует первому объекту в списке. В примерах 1 и 2 список объектов состоит всего из одного объекта – переменной $name. Однако ничто не мешает вам использовать несколько элементов форматирования. Следующие примеры иллюстрируют это подход.

Пример 4. Используем статический метод Format с двумя элементами форматирования

В этом примере я определю две переменных — $name и $statement. Я хочу, чтобы в выводе присутствовали строки “The” и “thinks that”, а также восклицательный знак. Кроме того, в результирующей строке должны присутствовать значения определенных мной переменных. Что здесь немного смущает, так это количество запятых в определении параметров метода.

PS C:\> [string]$name = ‘Scripting Guy’

PS C:\> [string]$statement = ‘PowerShell rocks’

PS C:\> [string]::Format(«The {0} thinks that {1}!»,$name,$statement)

The Scripting Guy thinks that PowerShell rocks!

Пример 5. Используем оператор Format с двумя элементами форматирования

После того как вы разберетесь, как применяется оператор –f в Windows PowerShell, его использование становится намного проще. Строка, определяющая формат располагается слева от оператора –f, а список объектов – справа. И, как мне кажется, по сравнению с методом Format, использование оператора –f делает код более читаемым.

PS C:\> [string]$name = ‘Scripting Guy’

PS C:\> [string]$statement = ‘PowerShell rocks’

PS C:\> «The {0} thinks that {1}!» -f $name, $statement

The Scripting Guy thinks that PowerShell rocks!

Пример 6. Подставляем две переменные в строку

Указание двух переменных в строке делает код более сложным для восприятия. Отчасти это связано с тем, что имена переменных и символы строки могут находиться рядом друг с другом. Например – “$statement!”. Я, например, не могу с точностью сказать сработает ли это, пока не попробую (возможно, потребуется использование escape-символов).

PS C:\> [string]$name = ‘Scripting Guy’

PS C:\> [string]$statement = ‘PowerShell rocks’

PS C:\> «The $name thinks that $statement!»

The Scripting Guy thinks that PowerShell rocks!

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/11/understanding-powershell-and-basic-string-formatting.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s