我希望从bash切换到zsh,但关心bash脚本的兼容性。
所有bash脚本/函数都与zsh兼容吗?因此,如果这是真的,那么zsh只是对bash的增强吗?
发布于 2012-05-08 20:35:28
如果您的脚本以#!/bin/bash行开始,那么它们仍然将使用bash运行,即使您的默认shell是zsh。
我发现zsh的语法非常接近bash,如果确实存在一些不兼容的地方,我就不会注意。6年前,我从bash转到zsh,天衣无缝。
发布于 2012-05-08 23:04:24
如果您将大多数Bourne、POSIX或ksh88脚本置于正确的仿真模式(emulate sh或emulate ksh)中,则Zsh可以运行它。它不支持bash或ksh93的所有特性。Zsh具有bash的大部分特性,但在许多情况下具有不同的语法。
您交互使用的shell与您拥有的任何脚本无关。运行脚本的shell是第一行谢邦行中指示的shell。例如,如果脚本以#!/bin/bash开头,它将由bash执行。
如果您已经定制了bash,就不能将.bashrc重命名为.zshrc。有些东西是可以共享的,例如别名和函数,只要您坚持两个shell之间的交集(交集接近ksh88和pdksh)。其他事情,如提示设置,完成函数和大多数选项,将需要完全重写。
如果您正在为人们编写一个代码片段,以便从他们的.bashrc或.zshrc中获取源代码,并且您不想维护两个版本,那么请坚持使用bash和zsh特性的一个公共子集,其中包括bash的大部分编程功能。将整个代码放入函数中,并将以下一行放在每个函数的顶部:
if [ -n "$ZSH_VERSION" ]; then emulate -L ksh; fi您可以使用emulate sh而不是emulate ksh来更接近普通的sh语法,这正是.profile所需要的。
如果一个函数调用另一个函数,则另一个函数继承模拟设置,因此您不需要将这一行放在内部函数中,只放在最终用户调用的函数中。
发布于 2020-04-22 01:51:55
没有zsh与bash有一些不同之处。因此,如果您从来不编写脚本,就像只从命令行编写东西一样,那么使用zsh可能是值得的,因为它有一些非常好的特性,并且有许多与自动完成相关的实用程序支持它。
然而,如果您编写脚本,您可能想要避免学习2种脚本语言,所以只需坚持bash,因为它现在无处不在,而且您不想在任何地方安装zsh。
https://unix.stackexchange.com/questions/38172
复制相似问题