PowerShell: 文字列の使い方、複数行、ヒア文字列

PowerShellで文字列を使う場合は 「"」(ダブルクォーテーション)「'」(シングルクォーテーション)で囲みます。 「"」や「'」で囲って記述したものを「文字列リテラル」と言い、 文字列リテラルはそのまま表示したり、変数に代入することができます。

# ダブルクォーテーション
$a = "こんにちは" 

# シングルクォーテーション
$b = 'こんにちは' 

「"」と「'」はどちらでも好きな方を使えばいいのですが、 変数展開をしたい場合はダブルクォーテーションを使います。 シングルクォーテーションは変数展開されません。

参考ページ: PowerShellでの変数展開

複数行の文字列

文字列中に改行コードを入れて複数行の文字列を作成することもできます。 その場合「`n」(バッククォート+n)を入力します。 PowerShellではエスケープ文字は「`」(バッククォート)を使用します。 「\n」ではないので注意してください。

# `nで改行コード
Write-Host("hello`nworld")

# 実行結果
hello
world

ヒア文字列

複数行の文字列を変数に格納したい場合は、 ヒア文字列を使用すると便利です。 ヒア文字列を使うと自分で改行コード「`n」を記述しなくても 複数行の文字列を作成できます。

ヒア文字列は次のように「@"」で始まり「"@」だけの行で終わります。 ダブルクォーテーションの部分はシングルクォーテーションでも大丈夫です。 違いは先程と同じように変数展開できるかどうかです。

$ss = @"
複数行の
文字列
"@

次のサンプルコードのように、 最初の「@"」の後に改行せずに文字を入力したり、 最後の「"@」の前に文字を入力するとエラーになります。

# エラーになる
$ss = @" 複数行の
文字列
"@

# エラーになる
$ss = @"
複数行の
文字列 "@

ダブルクォーテーション、シングルクォーテーションを表示する

文字列中にダブルクォーテーションやシングルクォーテーション自体を表示する場合は、 いくつか方法があります。

ダブルクォーテーションを表示

  • 「"」を2つ重ねて「""」と入力する
  • エスケープ文字「`"」(バッククォート + ")を使用する
  • 文字列をシングルクォーテーションで囲む

それぞれの方法のコードは次の通りです。

Write-Host "こんにちは""田中""さん"
Write-Host "こんにちは`"田中`"さん"
Write-Host 'こんにちは"田中"さん'

# 実行結果
こんにちは"田中"さん
こんにちは"田中"さん
こんにちは"田中"さん

シングルクォーテーションを表示

  • 「'」を2つ重ねて「''」と入力する
  • エスケープ文字「`'」(バッククォート + ')を使用する
  • 文字列をダブルクォーテーションで囲む

それぞれの方法のコードは次の通りです。

Write-Host 'こんにちは''田中''さん'
Write-Host 'こんにちは`'田中`'さん'
Write-Host "こんにちは'田中'さん"

# 実行結果
こんにちは'田中'さん
エラー発生
こんにちは'田中'さん

2番目の方法はなぜかエラーが発生しました。 「"こんにちは`'田中`'さん"」なら表示されるのですが 「'こんにちは`'田中`'さん'」はエラーになります。 PowerShellのバグなのかどうかはわかりませんが、 「PowerShell Version 5.1」ではエラーになります。 ですから1番目か3番目の方法でシングルクォーテーションを表示させてください。

PowerShell
PR