【PowerShell】文字列リテラルと配列の値を綺麗に結合する方法


この記事はプロモーションを含みます。

PowerShell

ホーム > PowerShell 逆引きリファレンス

PowerShellで、文字列リテラルと配列の値を綺麗に結合する方法を解説します。
ここでの綺麗にとは、間に半角スペースなど不要な文字列が入らないように結合することを指します。

はじめに

PowerShellでは、文字列を結合する方法は様々なものがあります。
文字列と配列の値を結合する方法も色々ありますが、
結合方法によっては、以下のように、文字列と配列の値の間に半角スペースが入ってしまう場合があります。
今回は、どのような時に半角スペースが入るのか、また、どうすれば半角スペースを入れずに結合することが出来るのかを説明します。

下記のように、スクリプト上は、半角スペースが入っていません。

$array = @("みかん", "メロン", "りんご")
Write-Host "引数1>"$array[0]

しかし、実行すると「>」と「みかん」の間に半角スペースが入ってしまっています。

引数1> みかん

このような場合に、どうすれば、半角スペースを無くせるかを次項から説明していきます。

文字列リテラルと配列の値を結合する

文字列リテラルと配列の値を結合する方法と、結合した結果がどのようになるかを説明していきます。

演算子無しで結合する

演算子を使用せず、文字列リテラルと値を直接結合する例です。

例として、囲み文字無し、シングルクォーテーション・ダブルクォーテーションで囲んだものを試しています。
ここでは、Write-Hostで表示する情報の全てを囲み文字で囲んでいます。

$array = @("みかん", "メロン", "りんご")

Write-Host 引数1:$array[0]
Write-Host '引数1:$array[0]'
Write-Host "引数1:$array[0]"

上記の実行結果です。

PS C:\workspace\PowerShell> .\test.ps1
囲み文字無し:みかん メロン りんご[0]
シングルクォーテーション:$array[0]
ダブルクォーテーション:みかん メロン りんご[0]

囲み文字無し、ダブルクォーテーションの場合は、配列の値が全て表示されています。
シングルクォーテーションの場合は、配列の値が展開されていません。

シングルクォーテーションとダブルクォーテーションを使用した際の挙動について詳しく知りたい方は以下で説明しています。

次に、リテラル文字列のみを囲み文字で囲んだ例を説明します。

$array = @("みかん", "メロン", "りんご")

Write-Host 囲み文字無し:$array[0]
Write-Host 'シングルクォーテーション:'$array[0]
Write-Host "ダブルクォーテーション:"$array[0]

上記の実行結果です。

PS C:\workspace\PowerShell> .\test.ps1
囲み文字無し:みかん メロン りんご[0]
シングルクォーテーション: みかん
ダブルクォーテーション: みかん

シングル・ダブルクォーテーションのともに、配列の値は展開されていますが、
リテラル文字列と配列の値の間に、ソースコード上には記述していないはずの半角スペースが含まれています。

半角スペースが入らないように結合する

ここでは、半角スペースが入らないように結合する方法を説明します。

下記のように「()」で囲むことで、半角スペースが入らないようになります。
また、リテラル文字列と配列の値の間に「+演算子」を記述する必要があります。

$array = @("みかん", "メロン", "りんご")

Write-Host ('シングルクォーテーション:' + $array[0])
Write-Host ("ダブルクォーテーション:" + $array[0])

上記の実行結果です。

PS C:\workspace\PowerShell> .\test.ps1
シングルクォーテーション:みかん
ダブルクォーテーション:みかん

シングル・ダブルクォーテーションを使用しない場合は以下のエラーが発生します。

PS C:\workspace\PowerShell> .\test.ps1
囲み文字無し: : 用語 '囲み文字無し:' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前
として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してか
ら、再試行してください。
発生場所 C:\workspace\PowerShell\test.ps1:3 文字:13
+ Write-Host (囲み文字無し: + $array[0])
+             ~~~~~~~
    + CategoryInfo          : ObjectNotFound: (囲み文字無し::String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

+演算子で結合する

+演算子を使用して、文字列リテラルと値を直接結合する例です。

例として、囲み文字無し、シングルクォーテーション・ダブルクォーテーションで囲んだものを試しています。

$array = @("みかん", "メロン", "りんご")

Write-Host 囲み文字無し: + $array[0]
Write-Host 'シングルクォーテーション:' + $array[0]
Write-Host "ダブルクォーテーション:" + $array[0]

上記の実行結果です。

PS C:\workspace\PowerShell> .\test.ps1
囲み文字無し: + みかん
シングルクォーテーション: + みかん
ダブルクォーテーション: + みかん

どのパターンも、リテラル文字列と配列の値の間に「+」記号が表示されています。

このような場合は、以下のように記述することで「+」記号が表示されずに結合することが出来ます。

$array = @("みかん", "メロン", "りんご")

Write-Host ('シングルクォーテーション:' + $array[0])
Write-Host ("ダブルクォーテーション:" + $array[0])

実行結果です。

PS C:\workspace\PowerShell> .\test.ps1
シングルクォーテーション:みかん
ダブルクォーテーション:みかん

囲み文字を使用せずに以下のように記述するとエラーとなります。

Write-Host (囲み文字無し: + $array[0])

下記はエラーの内容です。

PS C:\workspace\PowerShell> .\test.ps1
囲み文字無し: : 用語 '囲み文字無し:' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前
として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してか
ら、再試行してください。
発生場所 C:\workspace\PowerShell\test.ps1:3 文字:13
+ Write-Host (囲み文字無し: + $array[0])
+             ~~~~~~~
    + CategoryInfo          : ObjectNotFound: (囲み文字無し::String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

コメント

タイトルとURLをコピーしました