複雑なシェルコマンドに [〜#〜] awk [〜#〜] を使用したテキスト出力の解析が含まれていると、常に問題が発生します。基本的に、構造化データをテキストに変換してから、テキストを再度解析して、構造化データに戻ります。
PowerShell は、テキストだけでなく、シェルコマンド間で型指定されたオブジェクトをパイプ処理できるようにすることで、この問題を回避するWindowsシェルです。
PowerShellのように、テキストベースではなくオブジェクトベースのUnixシェルはありますか?
いいえ、その逆です。スプーン^ H ^ H ^ Hの構造化データはありません。テキストのみです。
Unixの哲学の大部分は、テキストを出力し、入力としてテキストを受け入れるという考えに基づいています。 " The Art of Unix Programming "を読むことを検討してください。
誤解しないでください。私はあなたの要点を理解し、あなたが何をしようとしているのかを知っています。 RubyやPythonのインタラクティブなインタプリタのようなものはシェルとして使用できますが、Bashほど基本的なタスクには適していません。たとえば、ディレクトリを変更してみてください。
また、シェルでオブジェクトを使用することがすべてではありません。あなたのShellだけがこれをサポートしている場合、Unixでは、あなたは途方に暮れるでしょう。 grep、awk、sedなど、すべての標準的なUnixテキスト操作ツールを変更する必要があります。
数年前にこういうものを作ろうと思ったのですが、その名前を思い出せず、久しぶりに聞いたことがありません。おそらく離陸しないでしょう。
実際には、PowerShell(Monoの上に)を実装することを目的とした Pash というプロジェクトがありますが、停止しているようです。
PowerShellは2016年にオープンソースになりました。それ以来、マルチプラットフォーム化が進んでいます。ソースコードは GitHub で入手でき、UNIXライクなシステムのインストールパッケージも入手できます。
PowerShellとの類似性を目標とするプロジェクトがあります Hotwire 。通常のshとpythonスクリプトおよびウィンドウ/グラフィック環境を組み合わせたものです。
これは、既存のプログラムをラップするか、Pythonライブラリを使用することにより、独自のオブジェクトで拡張できることを オブジェクト指向パイプライン に基づいています。
インタプリタされた(またはコンパイルされた)一連のスクリプトを記述し、インタプリタのシェル内でそれらを呼び出して、必要に応じてオブジェクトを返したり保存したりすることで、そのほとんどを達成できると思います。
これは、少なくともRuby、Perl、Python、Haskell(たとえば、GHCi)、JavaScript(たとえば、node.js)、Matlab、および確かに他の言語で行うことができます...
3年後の別の考え:XMLまたはJSONのいずれかを使用して、テキストストリームでオブジェクトを表すことが可能です。私はJSON(より単純)を好んでいます。実際、クラシックな* NIXユーティリティにJSONサポートを提供するプロジェクトがあります。例: https://github.com/step-/JSON.awk
AWKのような従来の* NIXプログラムにオブジェクトタイプモデルを使用する場合の1つの問題は、OOサポートがないことです。たとえば、AWKには連想配列がありますが、配列はマルチではありません。 -dimensional(AWK配列の各要素は数値または文字列である必要があります。配列はAWKの配列オブジェクトであってはなりません)。