Как объединить строку в 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Но когда вы делаете это с свойствами объекта, это не сработает. Чтобы решить эту проблему, вам нужно использовать подстановку переменных, где вы помещаете переменную внутри $();.
$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. Если у вас есть вопросы, просто оставьте комментарий ниже.
