首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有bash脚本都与“bash”兼容吗?

所有bash脚本都与“bash”兼容吗?
EN

Unix & Linux用户
提问于 2012-05-08 20:02:06
回答 3查看 96.8K关注 0票数 105

我希望从bash切换到zsh,但关心bash脚本的兼容性。

所有bash脚本/函数都与zsh兼容吗?因此,如果这是真的,那么zsh只是对bash的增强吗?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2012-05-08 20:35:28

如果您的脚本以#!/bin/bash行开始,那么它们仍然将使用bash运行,即使您的默认shell是zsh。

我发现zsh的语法非常接近bash,如果确实存在一些不兼容的地方,我就不会注意。6年前,我从bash转到zsh,天衣无缝。

票数 85
EN

Unix & Linux用户

发布于 2012-05-08 23:04:24

如果您将大多数Bourne、POSIX或ksh88脚本置于正确的仿真模式(emulate shemulate ksh)中,则Zsh可以运行它。它不支持bash或ksh93的所有特性。Zsh具有bash的大部分特性,但在许多情况下具有不同的语法。

您交互使用的shell与您拥有的任何脚本无关。运行脚本的shell是第一行谢邦行中指示的shell。例如,如果脚本以#!/bin/bash开头,它将由bash执行。

如果您已经定制了bash,就不能将.bashrc重命名为.zshrc。有些东西是可以共享的,例如别名和函数,只要您坚持两个shell之间的交集(交集接近ksh88和pdksh)。其他事情,如提示设置,完成函数和大多数选项,将需要完全重写。

如果您正在为人们编写一个代码片段,以便从他们的.bashrc.zshrc中获取源代码,并且您不想维护两个版本,那么请坚持使用bash和zsh特性的一个公共子集,其中包括bash的大部分编程功能。将整个代码放入函数中,并将以下一行放在每个函数的顶部:

代码语言:javascript
复制
if [ -n "$ZSH_VERSION" ]; then emulate -L ksh; fi

您可以使用emulate sh而不是emulate ksh来更接近普通的sh语法,这正是.profile所需要的。

如果一个函数调用另一个函数,则另一个函数继承模拟设置,因此您不需要将这一行放在内部函数中,只放在最终用户调用的函数中。

票数 44
EN

Unix & Linux用户

发布于 2020-04-22 01:51:55

没有zsh与bash有一些不同之处。因此,如果您从来不编写脚本,就像只从命令行编写东西一样,那么使用zsh可能是值得的,因为它有一些非常好的特性,并且有许多与自动完成相关的实用程序支持它。

然而,如果您编写脚本,您可能想要避免学习2种脚本语言,所以只需坚持bash,因为它现在无处不在,而且您不想在任何地方安装zsh。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/38172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档