我正在编写一组 shell 帮助程序脚本 - 一种用于简单数据/文本文件处理的工具箱。
其中会有一些简单的工具,例如:dateToTimestamp
或showParagraphHeads
。
我的问题是:
我应该将它们编写为流过滤器还是仅参数工具?
让我简单解释一下。一些标准 shell 工具显然是一个流过滤器,例如awk
,sed
或tr
,sort
但其他工具仅适用于类似参数date
(这是 setter/getter,但无论如何)。
showParagraphHeads
:
所以现在,如果我编写一个脚本来显示每个文本块的第一行(尽管 awk/sed 中的短行),答案是显而易见的,因为我需要一些多行流/文件来做到这一点。
dateToTimestamp
:
但是如果我写一些将日期从 - 比如说 - YMDhms 转换为时间戳的东西它可以作为流过滤器,也可以作为仅参数工具(类似于date
),用法如下:
dateToTimestamp DATE_IN_YMDhms
现在,两种方式都有其优点和缺点。有时,使用管道和我的流过滤器会更容易。另一次,我有更复杂的数据,需要awk {system()}
在某些列上使用,那么使用基于参数的工具会更容易。
我知道这是一个普遍问题,但也许您知道 *nix 世界中某个地方可能存在的一些约定或准则。
谢谢。
答案1
的一部分Unix哲学是“编写程序来处理文本流,因为这是一个通用接口。”,或者使用流过滤器。
也就是说,您希望(或需要)如何使用这些工具?
让这个问题的答案在逐个工具的基础上回答你的问题,因为 Unix 哲学的另一部分是,具有简单实现的功能简单的程序比与其他程序行为一致的程序更好。
因此,从您的示例中得出,如果转换日期格式的实用程序非常简单(如果它接受参数),那么仅在满足您的需求时才接受参数。