作为新生代 shell 的代表,fish、nu、elvish、pwsh 各有什么优劣?

能说两句,但并没有都用过。还有 Zsh 虽然老(只比 Bash 晚一年诞生)但它也是现代化用户最多的选择之一。fish:开箱即用做得好,Zsh 需要很多插件做的事情它自带了。有不少基础交互似乎已经比 Zsh 做得更好了。不兼容 POSIX/sh。脚本设计友好(糟粕少),但编程深度一般。这个项目诞生于 2005 年,但代码却以 Rust 为主。初看很奇怪,因为它经历了从 C 到 C++ 再到 Rust 的重写。Zsh:传统又现代的选择。配置和定制潜力极大,兼容 POSIX/sh。脚本和 Bash 有差异但也高度相似,没有本质进步。都包含大量“惊喜”,继承了一堆历史糟粕。on-my-zsh 大幅度拉升体验和可玩性。长期以来是我的主用 Shell。认可它的交互体验,脚本什么的还是算了吧。nu (Nushell):非常新的项目。对它有期待,但并未实际使用。原生的 Rust 的实现,目前而言知名度相较 fish 低很多。但增长率很快,stars 数高于 fish。吸引了一群尝鲜的人(虽然暂时未吸引到我)。结构化输出(table / record / list / object),复杂的语言特性(逼近现代化编程语言)。已经不算是传统 Shell 了。elvish 等小众:相较于传统在某些方面有进步,但没啥好讲的。几乎就是玩具级的东西。pwsh:虽然不用,但很清楚它是什么。有很强的 Windows 管理能力,能调用 WMI/CIM/Active Directory/.NET。使用 .NET 兼容的结构化对象,有强大的编程潜力和 .NET 的可交互性。作为脚本非常不错,但终端交互用途的体验略差。如果要必须选一个“下一代”Shell,我会用 Nushell 而不是 Powershell。Bash:虽然“新生代”们就是为了干掉它,但它留下了太多的遗产,实在是很难撼动。这位老干部尽早退休肯定是对世界有益的,但就目前还不太现实(在 Linux 上)。最后再说一些。Nushell 综合来看可能是最亮眼的下一代,PowerShell在系统管理方面有很强的实用性。但它们仍然难以成为主流(考虑跨平台)。反而是 fish 和 Zsh 这种 90 年代的传统 Shell 风格的“非下一代”,一个交互体验做得好一个生态强大,仍然是主力的选择。还有其实命令行程序也很重要。那一堆老掉牙的 coreutils 仍在被大量使用呢,终端交互体验不完全取决于 Shell。而编程特性对正经开发者吸引力很弱(可能就吸引一些业余和运维群体)。