相変わらずbashな日々です。
さて、PowerShellでちょくちょく整列させたりとか、小細工をしたりが多いのですが、ヒア文字列がネタになっていたので1つ。
ヒア文字列 (ヒアストリング)とは
英語好きな人はこれを読めばいいんではないでしょうか。 Windows PowerShell Tip of the Week
例えば、" "
の中で" "
を使うにはエスケープが必要です。
"`"hello World!!`""
結果、このように出力されます。
"hello World!!"
しかし、ヒアストリングを用いることで、ヒア文字列内部の"
のエスケープ処理が不要となります。
@" "Hello World!!" "@
結果、このように出力されます。
"Hello World!!"
エスケープ処理以外に"" と @" "@では何か違うのか
違いはありません、検証してみましょう。
a,b,cにそれぞれ代入してみました。
$a = "This is a : hogehoge" $b = "This is b : line 1 line 2" $c = @" This is c : line 1 line 2 "@
1. 表示の差異
$a $b $c
ずれはありませんね。
This is a : hogehoge #aの結果 This is b : line 1 #bの結果 line 2 This is c : line 1 #cの結果 line 2
2. 型の差異 当然ありません。
$a.GetType() $b.GetType() $c.GetType()
全てStringですね。
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object True True String System.Object True True String System.Object
3. 文字長さ 問題なしです。
$a.Length $b.Length $c.Length
改行を含めた記入にも際はありません。
20 26 26
4. 文字の照合
差異が無いか見てみましょう。
PS> diff $bb $cc InputObject SideIndicator ----------- ------------- c => b <= PS> $bb | %{$i=1}{[PSCustomObject]@{char=$_;i=$i};$i++} | Format-Table -AutoSize char i ---- - T 1 h 2 i 3 s 4 5 i 6 s 7 8 b 9 10 : 11 12 l 13 i 14 n 15 e 16 17 1 18 ... 19 ... 20 l 21 i 22 n 23 e 24 25 2 26 PS> $cc | %{$i=1}{[PSCustomObject]@{char=$_;i=$i};$i++} | Format-Table -AutoSize char i ---- - T 1 h 2 i 3 s 4 5 i 6 s 7 8 c 9 10 : 11 12 l 13 i 14 n 15 e 16 17 1 18 ... 19 ... 20 l 21 i 22 n 23 e 24 25 2 26
まとめ
""
でエスケープするのか、ヒア文字列で統一するのか、どちらでも良いですが、むやみに混ざると読みにくいので注意です。
SQLとか、OOの式をそのまま入れる時には便利ですが、"@
を新規行の頭に置かないといけないのでフォーマットが崩れます。
どうせなら完全にエスケープされない書式があっても……と思いましたがGet-Content(cat)
を使えばエスケープせずに読み取れますね。