回上级页面

Bash 的真谛

2023 年 04 月 16 日


虽然我已经用了 Bash 将近 20 年,几乎每天都在使用它,但我确定自己绝非 Bash 专家,充其量只是小学生级别,此事可从多年前我写过的一篇文章「写给高年级小学生的《Bash 指南》」获得证明。现在让我写一份 Bash 脚本,即使是完成非常简单的任务,我依然要从网络上搜索 Bash 的语法。现在 Chat GPT 大行其道了,问问它可能会更好一些。不过,Bash 的真谛可能恰恰是 Bash 专家们难以发现的,原因很简单,因为他们并非天才。

Bash 作为一门历史悠久的 Shell 语言,体内流淌的自然是 Unix 的血液。Unix 发明人之一,C 语言之父 Dennis Ritchie 曾经说过,Unix 是简单的,但只有天才能够理解这种简单。对于 Bash 也是如此。

Ritchie 所说的天才,并非世俗所认为的那种天才。Unix 的本质,亦即它体现的哲学,是反世俗的,如同老子的学说那样反世俗。Ritchie 所说的那句话,两千多年前的老子早已说过,「我言甚易知,甚易行,而世人莫能知,莫能行」。任何一个人,倘若他的思想和言行一贯地反世俗,基本上意味着他已抵仙境了。世俗里的一切皆为镜花水月,唯有反世俗,方能长存。

许多人对 Bash 的批判,诸如

这些批判都是正确的。只是他们所批判的,恰恰是 Bash 所坚持的。

俗人昭昭,我独昏昏。俗人察察,我独闷闷。Unix 是如此,Bash 自然也是如此,它们都是简单的。理解不了这种精神,自然就无法理解这种简单。他们对 Bash 的批判,总体反映的是,Bash 不适合编写较大的程序,只适合写短小的脚本。事实上,Bash 可能甚至都不希望它的用户去写脚本,哪怕是短小的脚本。Bash 语言的设计,并非是方便人类用它编程,而是方便组合系统中现有的程序以完成复杂的任务,故而上述对 Bash 的批判,犹如在批判一个男人没法怀孕。

对于任何一个任务,倘若能够通过 Bash 语言将一些现有的程序简单地组合起来便能得以妥善解决,从而避免使用某种语言为其编写程序,这是使用 Bash 的正确方法。例如,我曾经用了不到三十行代码便实现了一个截屏甚至录屏工具,见「用 Bash 脚本写一个截屏工具」。如果 Bash 无法解决某个问题,你可以使用自己喜欢的任何一门语言为其编写一个程序,然后令其融入 Bash 环境,这是使用 Bash 的另一正确方法,而这正是前一种方法的基础。这就是 Bash 的真谛。