Поиск по сайту:

Как объединить строку в PowerShell


При выводе данных из PowerShell часто нужно объединять две или более строки или переменные. Соединение строк в PowerShell в первую очередь выполняется с помощью оператора +. Но есть и другие способы объединения строк.

Проблема с объединением строк или переменных в PowerShell часто заключается в поиске правильного метода вывода. Вам может понадобиться дополнительный пробел между двумя строками, или же вы получите знак + в выводе, чего, конечно, не хотелось бы.

В этой статье мы рассмотрим различные методы соединения нескольких строк в PowerShell.

Конкатенация строк в PowerShell

Основной метод конкатенации строк в PowerShell - использовать оператор +. При использовании оператора + две строки просто объединяются. Начнем с следующих двух строк:

$string1 = "The quick brown fox"
$string2 = "jumps over the lazy dog"

Теперь, если мы хотим вывести эти строки вместе в консоли PowerShell, люди часто склонны делать следующее:

Write-Host $string1 + $string2

Result
The quick brown fox + jumps over the lazy dog

Но если вы посмотрите на результат, вы увидите, что знак + также присутствует в выводе, а мы этого не хотим. Правильный способ вывести обе строки в консоль - просто поместить их одну за другой.

Write-Host $string1 $string2

Result
The quick brown fox jumps over the lazy dog

Но это не конкатенация строк. Чтобы на самом деле объединить строки, мы можем сначала сохранить результат в другой переменной, используя оператор +:

$string1 = "The quick brown fox"
$string2 = "jumps over the lazy dog"

$result = $string1 + $string2

Write-Host $result

Result
The quick brown foxjumps over the lazy dog

Единственная проблема здесь в том, что вы пропускаете пробел между двумя строками. Поэтому, чтобы это решить, вы могли бы также соединить два строк с пробелом между ними:

$result = $string1 + " " + $string2

Использование оператора соединения

Другой метод объединения строк в PowerShell - это использование оператора Join. Операторы join позволяют вам конкатенировать две или более строки с указанным разделителем. Используя наши два примера строк, мы можем сделать следующее:

$result = $string1,$string2 -join " "

Result
The quick brown fox jumps over the lazy dog

Еще одним вариантом является использование метода соединения .Net. Принцип и результаты такие же, как у оператора соединения, только стиль написания немного другой:

[string]::Join(' ',$string1,$string2)

Использование оператора формата

Когда вам нужно вставить несколько переменных в строку, использование оператора форматирования строк может быть хорошим вариантом. Преимущество оператора форматирования -f заключается в том, что с его помощью легче читать и форматировать более длинные строки или несколько переменных.

Оператор форматирования использует заполнители, чтобы определить, куда вы хотите вставить строку или переменную. Заполнители нумеруются от 0 и помещаются между фигурными скобками.

Возьмем пример ниже, у нас есть PSCusstomObject с парой строк. Мы можем объединить эти строки в PowerShell в другую строку, используя оператор форматирования строк.

$obj = [PSCustomObject]@{
  Name = 'Lazy Dog'
  Action = 'jump over'
  Item = "3 fences"
}

write-host ("can the {0} really {1} more than {2}" -f $obj.name, $obj.action, $obj.item)

Result
can the Lazy Dog really jump over more than 3 fences

Вам не нужно использовать переменные для правой стороны оператора -f. Вы также можете напрямую вставлять строки или целые числа:

$obj = [PSCustomObject]@{
  Name = 'Lazy Dog'
  Action = 'jump over'
  Item = "fences"
}

write-host ("can the {0} really {1} {2} {3} {4}" -f $obj.name, $obj.action, 'less than', 5, $obj.item)

Result
can the Lazy Dog really jump over less than 5 fences

Если у вас есть массив строк, которые вы хотите объединить в PowerShell, вы также можете использовать оператор форматирования, не указывая каждое отдельное значение для плейсхолдера.

$values = @(
    "Lazy Dog"
    "Jumps"
    "fences"
)
'Did you know that the {0} {1} 5 {2}?' -f $values

Result 
Did you know that the Lazy Dog Jumps 5 fences?

Конкатенировать строку с переменной

Конкатенация строк с переменными, а особенно с объектами или хеш-таблицами, всегда немного сложна. Если у вас есть одна переменная, которую вы хотите вставить в строку, то вы можете просто поместить строку в двойные кавычки “, и вставить переменную напрямую:

$var = 'fox'

Write-Host "The quick brown $var jumps over the lazy dog"

Result
The quick brown fox jumps over the lazy dog

PowerShell конкатенация строк

Но когда вы делаете это с свойствами объекта, это не сработает. Чтобы решить эту проблему, вам нужно использовать подстановку переменных, где вы помещаете переменную внутри $();.

$obj = [PSCustomObject]@{
  Name = 'Lazy Dog'
  Action = 'jump over'
  Item = "fences"
}

Write-Host "The quick brown fox jumps over the $($obj.name)"

Result
The quick brown fox jumps over the Lazy Dog

Используя метод Concat

В PowerShell мы также можем использовать метод .Net concat для конкатенации строк. Преимущество оператора или метода Join заключается в том, что вам не нужно указывать разделитель, но это также несколько ограничивает область применения.

$values = @(
    "Lazy Dog"
    "Jumps"
    "fences"
)

[string]::Concat('Lazy Dog','Jumps','fences')
Or when you have an array with values:
[string]::Concat($values)

Result for both methods:
Lazy DogJumpsfences

Заключение

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

Когда вам нужно соединить лишь пару строк, использование оператора + часто является предпочтительным способом. Когда нужно объединить несколько строк или значений, оператор форматирования (метод с заполнителями) часто легче читать.

Также имейте в виду, что когда вы хотите вывести свойства объекта, вам нужно обернуть их в скобки $() и использовать двойные кавычки для обрамления строки.

Надеюсь, эта статья помогла вам соединить строки в PowerShell. Если у вас есть вопросы, просто оставьте комментарий ниже.