关于 Rexx
Rexx 编程语言最初创建于 1979 年,是个层次很高的脚本语言,有特别强大的用于文本处理任务的工具。从 Rexx 诞生起,IBM 就将各种版本的 Rexx 加入到他的操作系统中 —— 从主机到中型机再到终端用户操作系统,比如 OS/2 和 PC-DOS。其他 OS 制造商,比如 Amiga,也将 Rexx 作为永远可用的系统脚本语言集成进来。此外,许多单独软件研发商为很多平台创建了 Rexx 环境。再晚些时候,ANSI 于 1996 年正式为 Rexx 采纳了一个标准。
当前(尤其是在 Linux 或起源于 BSD 的 OS 上),Rexx 的那些大部分早期实现,主要作为历史足迹为人们所关心。但是,两个当前保持的 Rexx 实现能够用于包括 Linux、MacOSX 和 Windows 在内的许多平台:Regina 和NetRexx。Regina 是本地执行文档,以免费软件源代码方式,或为诸多平台预编译好的方式获得 —— 您能够像安装任何其他语言解释器相同安装他。NetRexx 是个有趣的“混合物”。此语言派生自普通的 Rexx。更类似于 Jython 或 Jacl,NetRexx 将类似于 Rexx 源代码编译为 Java 字节代码,并(可选)在 JVM 中运行作为结果生成的 .class 文档。
NetRexx 是个 IBM 项目,用于为 Java 虚拟机编译类似于 Rexx 的代码。在实际能力和编程级别上,Rexx 最接近于 bash 加上 GNU 文档工具(外加 grep 和 sed );或可能相当于 awk 或 Perl。当然,相对于 Python、Ruby 或 Java 来说,Rexx 让人感觉更为快而粗糙。Rexx 的冗长 —— 或更应该说是,简洁 —— 类似于 Perl、Python、Ruby 或 TCL。并且,Rexx 当然是完全 Turing 的,支持模块和结构化编程,有面向专门任务的库,例如 GUI 接口、网络编程和数据库访问。但是他最自然的目标在于系统脚本的自动化和本文处理任务。和 shell 脚本一起,Rexx 使得应用程式的控制很自然且显而易见;但相对于 bash (或 tcsh 、 ksh 等等),Rexx 中包含了更丰富的内置控制结构和(文本处理)函数。
在文体上,Rexx 的 IBM/mainframe 根源体现在他对命令的大小写敏感;在某种次要程度上也体现在他使用标点符号相对较少 (更多用关键字而不是符号)。我倾向于认为这些特性的目的是提高可读性;但这在很大程度上取决于个人的爱好。
从流和栈开始
作为一个简单的小例子,让我来介绍一个特别简单的工具的多个版本,他能够列出文档并对其进行编号。Rexx 和 shell 脚本的一个一起点是,他用于和底层操作系统打交道的函数相对很少 —— 几乎仅限于能够打开、读和修改文档。对大部分其他事情,您需要依赖于外部实用程式来完成手头上的工作。实用程式 numbered-1.rexx 只是处理 STDIN:
清单 1. numbered-1.rexx
|
无处不在的指令 PARSE 能够从各种不同的源读入。在这里,他将 STDIN 的下一行赋给变量 line 。我们也会检查某一行是否为空,假如是空的话,则不进行显示和编号。例如,和 ls 组合使用我们能够得到:
清单 2. 将命令通过管道传输到 numbered-1
|
同样您能够方便地将任何其他命令通过管道传输进来。
Rexx 的核心概念之一是巧妙地处理多个栈或流。类似 bash 的风格,在 Rexx 中任何没有被识别为内部指令或函数的内容,都被假定为一个外部实用程式。没有特定的函数或语法用于调用外部命令。Regina 的实用程式 rxqueue 能够将输出压入 Rexx 栈,利用他我们能够写一个这样的“有编号的 ls”实用程式:
清单 3. ls-1.rexx
|
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



