我的方法使用 cshell。作为一名 C 程序员,我与 cshell 的联系更好。但除此之外,我使用迭代器来解决问题,递增两次。
macetw
好久没看到有人用Csh写了。在早期的 Unix 时代,有两个主要的 shell:Csh 和 Bourne shell。Bourne 是 AT&T 风格,而 BSD(伯克利标准发行版)使用 Csh,它从 C 语言中获取语法提示。
我认识的大多数人都使用 Csh 作为他们的标准 shell,但在 Bourne shell 中编写脚本是因为 Csh 存在Tom Christiansen指出的各种问题(正如 Olivier Dulac 已经提到的)。但是,Csh 具有命令别名、命令行历史和编辑功能。人们在命令行 shell 中想要的功能。
Csh 在 SunOS 时代达到顶峰。SunOS 基于 BSD,Sun 管理员几乎所有的脚本都是用 Csh 编写的。然而,大卫科恩用 Kornshell 改变了很多。Kornshell 包含标准的 Bournshell 语法语言,但包含人们希望在 Csh 中使用的命令别名和 shell 历史编辑等功能。不仅如此,它还包含许多以前从未在 shell 中发现的新功能,例如内置数学(再见expr
and bc
)、模式匹配[[ ... ]]
和 shell 选项可以用set -o
.
现在,根本不需要了解 Csh。您可以将 Kornshell 用作脚本语言和命令行 shell。当 Sun 用 Solaris 替换 SunOS 时,默认的 shell 是 Kornshell 而不是 C shell。这就是 C shell 作为可行的 shell 选择的终结。
Csh 的最后一位大倡导者是史蒂夫·乔布斯。NeXT 使用 TurboCsh 作为它的默认 shell,它是 Mac OS X 第一次迭代的默认 shell——在 Sun 放弃它很久之后。但是,更高版本的 Mac OS X 默认使用 BASH。
BASH 现在是默认的和标准的。正如我之前提到的,在大多数系统上,/bin/sh
是BASH。在 BASH 手册页中是这样的:
如果使用名称 sh 调用 bash,它会尝试尽可能地模仿 sh 的历史版本的启动行为,同时也符合 POSIX 标准。
这意味着实体 BASHisms ( shopt
, ${foo/re/repl}
, 等) 不活跃,但从 Kornshell ( [[ ... ]]
, set -o
, typeset
, $(( ... ))
) 继承的大部分东西仍然可用。而且,这意味着大约 99% 的 BASH 脚本即使被调用为/bin/sh
.
我相信 Tom Christiansen 反 Csh 论文中的大多数批评不再适用。Turbo C shell - 很久以前取代原来的 C shell 修复了许多错误。然而,Turbo C 是在世界上大部分人放弃 C shell 之后出现的,所以我真的不能说。
Csh 方法很有趣,但不是这个问题的正确答案。C Shell 脚本是一种与 Bourne shell 完全不同的语言。你最好用 Python 给出答案。