人人可用的 Rexx
2008-11-10 08:28:32 来源:WEB开发网在文体上,Rexx 的 IBM/mainframe 根源体现在它对命令的大小写敏感;在某种次要程度上也体现在它使用标点符号相对较少 (更多用关键字而不是符号)。我倾向于认为这些特性的目的是提高可读性;但这在很大程度上取决于个人的爱好。
从流和栈开始
作为一个简单的小例子,让我来介绍一个特别简单的工具的多个版本,它可以列出文件并对其进行编号。Rexx 和 shell 脚本的一个共同点是,它用于和底层操作系统打交道的函数相对很少 —— 几乎仅限于可以打开、读和修改文件。对大部分其他事情,您需要依赖于外部实用程序来完成手头上的工作。实用程序 numbered-1.rexx 只是处理 STDIN:
清单 1. numbered-1.rexx
#!/usr/bin/rexx
DO i=1 UNTIL lines()==0
PARSE LINEIN line
IF line="" THEN
SAY i || ") " || line
END
无处不在的指令 PARSE 可以从各种不同的源读入。在这里,它将 STDIN 的下一行赋给变量 line 。我们也会检查某一行是否为空,如果是空的话,则不进行显示和编号。例如,与 ls 组合使用我们可以得到:
清单 2. 将命令通过管道传输到 numbered-1
$ ls | ./numbered-1.rexx
1) ls-1.rexx
2) ls-2.rexx
3) ls-3.rexx
4) ls-4.rexx
5) ls-5.rexx
6) ls-6.rexx
7) numbered-1.rexx
8) numbered-2.rexx
同样您可以方便地将任何其他命令通过管道传输进来。
Rexx 的核心概念之一是巧妙地处理多个栈或流。类似 bash 的风格,在 Rexx 中任何没有被识别为内部指令或函数的内容,都被假定为一个外部实用程序。没有特定的函数或语法用于调用外部命令。Regina 的实用程序 rxqueue 可以将输出压入 Rexx 栈,利用它我们可以写一个这样的“有编号的 ls”实用程序:
更多精彩
赞助商链接