{ datagubbe }

datagubbe.se » bra and ket: string interpolation in amigados

BRA and KET:在 AmigaDOS 中使用字符串插值

探索不必要的,第 3735928559 部分 2025 年春

关于 AmigaDOS 脚本的简短说明

在不陷入语义争论的情况下,本文中的 AmigaDOS 指的是 Amiga 计算机操作系统的命令行部分。AmigaDOS 基于 TRIPOS,但由最初的 Amiga 团队和随后的 Commodore 进行了扩展和添加。基本保持不变的一件事是 shell 脚本(或 TRIPOS 中称为 sequence files)的解析器。对于 1980 年代的家用计算机操作系统来说,脚本解析器相当强大,可以用于解决现实世界中的编程问题

解析器接受一些特殊的指令,例如 .KEY,它用于描述传递给脚本文件的参数模板。例如,.KEY FILENAME/A 告诉解析器该脚本接受一个名为 FILENAME 的字符串参数。这些指令位于脚本文件的开头。

默认情况下,解析器使用字符 < (小于) 和 > (大于) 进行字符串插值。这种设计的巧妙性值得商榷:这些字符也用于 I/O 重定向,这会很快造成混淆。幸运的是,解析器也接受指令 .BRA.KET,每个指令后跟一个字符,允许程序员覆盖默认的插值字符。术语 BRA 和 KET 最有可能借用自 Dirac notation

一个简单的例子

通常,使用插值的 AmigaDOS 脚本会将默认字符替换为花括号,分别为 {}。这种趋势可能起源于 Commodore。考虑以下脚本:

.BRA {
.KET }
.KEY var
Echo Hello {var}!

这里,<> 被替换为 {}。该脚本接受一个参数 var,字符串插值然后将 {var} 替换为提供的参数。如果保存为文件 myscript 并执行,则可以实现以下 AmigaShell 会话:

AmigaShell> myscript datagubbe
Hello datagubbe!
AmigaShell> _

插值一下!

这当然引出了一个问题:哪些字符可以用于 shell 脚本中的字符串插值?感谢 Datagubbe Labs 才华横溢的研究人员的不懈努力,我们可以提供一个答案 - 世界各地的程序员终于可以睡个好觉了。事不宜迟,让我们开始吧!

测试工具

Amiga 上有一些文本编辑器可以愉快地将任何 ASCII 字符插入到文本文件中,但是当您可以构建自己的解决方案时,为什么要使用现有的解决方案呢? 一个 ARexx 程序 - makescript - 为了这个目的而被~~快速拼凑~~精心构建。 该程序生成一个 AmigaDOS 脚本文件,其中包含任意字符作为 .BRA.KET,以纯文本或 ASCII 字符代码的形式提供。makescript 的源代码可在此处获取

面包和黄油

正如预期的那样,默认值和标准的花括号替代方案都非常好用。Datagubbe Labs 自由地准备了屏幕截图,以进一步强调这项重要研究的有效性和严谨性。脚本也可以下载,以实现透明度和可重复性。见证:

A screenshot of an Amiga shell window running the scripts using default and curly bra-kets.

奇数和字母

非匹配的字符对,例如 [} 呢? 这也有效,这是预料之中的。 标准字母,例如 AB 也是如此。

A screenshot of an Amiga shell window running the scripts using odd and alphabetic bra-kets.

花里胡哨

最后,引入了非打印字符。 首先,测试了移出 (SO, 十进制字符代码 14) 和移入 (SI, 十进制字符代码 15)。 这些也有效。 然后,我们的不懈研究人员决定尝试 ASCII BEL 字符(十进制字符代码 7),以提高赌注。 AmigaDOS 通过在文本中遇到 BEL 字符时闪烁屏幕来处理它。 这在脚本执行中会如何表现? 为了关闭插值,选择了否定确认 (NAK, 十进制字符代码 21)。 事实证明,这也能完美运行 - 并且在执行脚本时没有遇到屏幕闪烁。

A screenshot of
an Amiga shell window running the scripts using SO/SI and BEL/NAK
bra-kets.

又一项出色的工作

当然,当使用 AmigaDOS 命令 Type 将脚本文件内容打印到 shell 窗口时,这些字符会引起一些骚动。 例如,BEL 会导致屏幕如预期般闪烁。 为了验证字符确实存在于脚本文件中,请随时下载上面的文件 - 或研究 MicroEMACS 的屏幕截图,它将非打印字符显示为控制序列。

总而言之,AmigaDOS 字符串插值既具有弹性又提供了多种选择 - 这是一件值得庆祝的事情。 感谢您的关注,祝您编程愉快!

privacy notice: datagubbe.se uses neither cookies nor javascript. | rss feed © carl svenss