1. トップ
  2. 新着ニュース
  3. IT
  4. パソコン

窓辺の小石 第177回 アキレウスのかかと

マイナビニュース / 2024年8月2日 14時24分

画像提供:マイナビニュース

Microsoftがシェルやシステムスクリプト用として開発したPowerShellにも「弱点」がある。たとえば、PowerShellは、XMLの扱いが苦手だ。いや、簡単に読み込んでアクセスできるだろう? と言われるかもしれない。PowerShellには、JSONやCSVとPowerShellのPSCustomObjectオブジェクト間で変換が行えるのに、XMLは変換が行えず、.NET側のオブジェクトをそのまま扱うことしかできない。

PowerShellは、プロパティなどの「名前」で大文字小文字を区別しない。これに対して、XMLでは、大文字小文字が区別される。このため、XMLをPowerShellのオブジェクトに変換すると、大文字と小文字の区別が失われてしまう。

大文字小文字を区別しないので、変数やプロパティ名で大文字小文字を間違えてもエラーにはならない。Windowsのファイル名と同じく、ユーザーが入力した大文字、小文字の区別は残る。このため、変数を定義するときに「$MyVar」としても、「$myvar」でアクセスできてしまう。プロパティ名なども同様で、大文字小文字が区別されない。エラーを減らすという点では効果はあると思われる。定義時には、大文字小文字を使ったキャメルケースなどで変数を定義しても、あとでアクセスするときには、それを忘れて小文字だけで入力してしまうことがある。シェルという使い方を考えると「便利」といえば「便利」である。

しかし、大文字小文字を区別すると不便で使いにくいのか? というとそうでもない。たとえば、Linuxでよく使われるbashなどUnix/Linux系では、昔から大文字小文字は区別されてきた。その上で、環境変数は大文字だけ使いましょう、ローカルの変数は小文字だけにしましょう、みたいな慣習があった。大文字小文字の区別があることは、それほど不便な感じはなかったし、大文字小文字を区別する言語も少なくないので、違和感も感じない。

具体的な例を見てみることにしよう。以下のリストは、テスト用のXMLをヒアドキュメントで入力して、アクセスするもの。

[xml]$xml=@"

"@

簡易な方法でアクセスしてみる。「$xml.main.sub」と入力すると、subタグとSUBタグは同一視されて2つの結果が出力される(写真01)。また、この方法では、タグと属性はともにプロパティとしてアクセスする。たとえば、subタグのid属性値は「$xml.main.sub.id」でアクセスする。

この記事に関連するニュース

トピックスRSS

ランキング

複数ページをまたぐ記事です

記事の最終ページでミッション達成してください