🐚

【PowerShell 備忘録】コンソールの改行コード

2021/07/03に公開

環境:

> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.1.3
PSEdition                      Core
GitCommitId                    7.1.3
OS                             Microsoft Windows 10.0.19042
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

結論

コンソール内の改行コードは LF

検証

PowerShell 的には LF は `n で、 CR は `r で表現されます(markdown のインラインコードで ` を表示させるのって難しい…)。

> "aaa
bbb" -match "`n"
True

> "aaa
bbb" -match "`r"
False

> "aaa
bbb".IndexOf("`n")
3

> "aaa
bbb".IndexOf("`r")
-1

念のため正規表現でも再確認。

> "aaa
bbb" -match "\n"
True

> "aaa
bbb" -match "\r"
False

スクリプトブロックも同じ扱いのようで安心ですね。

> $b = {
  1..5|% {
    "Number is: {0}" -f $_ | echo
  }
}

> & $b
Number is: 1
Number is: 2
Number is: 3
Number is: 4
Number is: 5

> $b.ToString() -match "`n"
True

> $b.ToString() -match "`r"
False

> $b.ToString().IndexOf("`n")
0

> $b.ToString().IndexOf("`r")
-1

PSReadline からコンソール上に表示されている複数行をパースしようとして、毎回改行コードについて調べていたので整理しました。
個人用の備忘録です。

Discussion