Jak w PowerShellu wygodnie łączyć stringi i zmienne

Łączenie ciągów znaków (stringów) i zmiennych to funkcja bez której nie sposób się obejść, niezależnie od użytego języka. PowerShell nie jest wyjątkiem i choć sposobów łączenia jest wiele oto najpopularniejsze z nich.

Sposób pierwszy: cudzysłowy

Pierwszym sposobem jest ujęcie ciągu w cudzysłowy " i umieszczenie zmiennych bezpośrednio w nim. Ten sposób jest idealny gdy w stringu trzeba umieścić wartości zmiennych bez dodatkowego formatowania.

$kolor = 'czerwony'
$przedmiot = 'stoliczek'
Write-Host "Entliczek pentliczek $kolor $przedmiot."

Można także wstawić własności zmiennych lub przetworzyć je w inny sposób wykorzystując $() i tworząc podwyrażenie. W przykładzie oprócz wartości zmiennej użyta będzie jej długość.

$kolor = 'czerwony'
$przedmiot = 'stoliczek'
Write-Host "Entliczek pentliczek $kolor ($($kolor.Length)) $przedmiot ($($przedmiot.Length))."
Łączenie stringów i zmiennych w Powershellu: użycie cudzysłowów

Sposób drugi: String.Format z .NET czyli -f

Drugim sposobem jest wykorzystanie metody String.Format znanej z .NET. Wpierw w stringu umieszcza się symbole {0}, {1} itd a następnie korzysta z korzysta z -f i przekazuje zmienne które będą podstawione zamiast wstawionych wcześniej symboli. Sposób ten jest idealny gdy poszczególne zmienne wyświetlane są wielokrotnie lub gdy potrzebne jest dodatkowe ich formatowanie.

$kolor = 'czerwony'
$przedmiot = 'stoliczek'
$tekst = 'Entliczek pentliczek {0} {1}.' -f $kolor, $przedmiot
Write-Host $tekst

Wstawianie własności zmiennych sprowadza się do przekazania wartości po -f, a ponadto można dowolnie formatować ich wyświetlanie na przykład by długość zmiennej była wypisana w dwóch cyfrach.

$kolor = 'czerwony'
$przedmiot = 'stoliczek'
$tekst = 'Entliczek pentliczek {0} ({1:00}) {2} ({3:00}).' -f $kolor, $kolor.Length, $przedmiot, $przedmiot.Length
Write-Host $tekst
Łączenie stringów i zmiennych w Powershellu: użycie -f

Sposób trzeci: wykorzystanie +

Nie bez powodu sposób ten został umieszczony na samym końcu. Choć umieszczenie zmiennych w ten sposób jest relatywnie łatwe, albowiem sprowadza się do oddzielania zmiennych i ciągów znakiem +, to finalny kod jest mocno nieczytelny. Niemniej jednak wypada wspomnieć o tej możliwości.

$kolor = 'czerwony'
$przedmiot = 'stoliczek'
$tekst = 'Entliczek pentliczek ' + $kolor + ' ' + $przedmiot + '.' 
Write-Host $tekst

Podobnie można przetwarzać zmienne lub korzystać z ich własności. Niestety przejrzystość kodu zaczyna spadać bardzo szybko.

$kolor = 'czerwony'
$przedmiot = 'stoliczek'
$tekst = 'Entliczek pentliczek ' + $kolor + ' (' + $kolor.Length + ') ' + $przedmiot + ' (' + $przedmiot.Length + ')' +  '.' 
Write-Host $tekst
Łączenie stringów i zmiennych w Powershellu: użycie +