当复杂的shell命令涉及使用AWK解析文本输出时,我总是觉得很尴尬。基本上,我们将结构化数据转换为文本,然后再次解析文本以获取结构化数据。
PowerShell是Windows外壳程序,它允许您在外壳程序命令之间而不是文本之间通过管道输入类型的对象,从而避免了该问题。
是否有像PowerShell这样基于对象而不是基于文本的Unix shell?
当复杂的shell命令涉及使用AWK解析文本输出时,我总是觉得很尴尬。基本上,我们将结构化数据转换为文本,然后再次解析文本以获取结构化数据。
PowerShell是Windows外壳程序,它允许您在外壳程序命令之间而不是文本之间通过管道输入类型的对象,从而避免了该问题。
是否有像PowerShell这样基于对象而不是基于文本的Unix shell?
Answers:
不,这是另一回事。没有汤匙^ H ^ H ^ H结构化数据。只有文字。
Unix哲学的很大一部分是基于输出文本并接受文本作为输入的思想。您可能需要考虑阅读“ Unix编程的艺术 ”,其中对此有很好的解释。
不要误会我的意思:我了解您的意思,也知道您要达到的目的。诸如Ruby和Python的交互式解释器之类的东西可以用作外壳,但它们对基本任务的友好程度不如Bash。例如,尝试更改目录。
而且,在外壳中使用对象还不是全部。如果只有您的shell支持这一点,那么在Unix上,您将无所适从。所有标准的Unix文本操作工具都必须更改,例如grep,awk,sed等。
我认为几年前就曾尝试创建类似的东西,但是我记不清这个名字,而且很长一段时间都没有听说过。它可能不会起飞。
ls(1)
。完全没用。
实际上,有一个名为Pash的项目旨在实现PowerShell(在Mono之上),但似乎停滞了。
三年后的另一个想法:可以使用XML或JSON用文本流表示对象。我更喜欢JSON(更简单),并且确实有一些项目可以提供经典的* NIX实用程序JSON支持。例如:https : //github.com/step-/JSON.awk
对于经典的* NIX程序(如AWK)使用对象类型模型时,一个问题是它们确实不具有OO支持。例如,虽然AWK确实具有关联数组,但这些数组不是多维的(AWK数组中的每个元素必须是数字或字符串; AWK中不允许将数组作为数组对象)。