Zsh 与 Bash zsh 和 bash 之间的简要区别
Shell 是用户与操作系统服务之间的接口。它提供了多种功能,例如后台处理、输入和输出重定向、别名、链接和链式命令等,从而简化了开发人员的工作。我使用 zsh 已经有一段时间了,发现它比 bash 更高效。因此,我整理了两者之间的差异列表,这对我理解它们有很大帮助。
那么让我们在一定的基础上比较这两个shell并找出它们之间的区别。
表现
这是测试 Shell 性能的有效方法之一。为了评估这一点,我们先生成一些负载,看看 Shell 的响应速度如何。
- 我通过运行以下命令比较了两个 shell 调用的速度:
time shell_name -c 'for i in $(seq 1 1000000);do [ 1 = 1 ];done'
在上面的命令中,将shell_name替换为 zsh 和 bash。
- 我编写了一个脚本,用于读取用户输入并在for循环中多次打印。这将有助于检查脚本的处理时间。
#!/bin/bash
# Script name: test.sh
for i in `seq 1 100`
do
for var in $*
do
echo "command line contains: $var"
done
done
在两个 shell 中运行以下命令,查看每个 shell 中的脚本执行时间。
time shell_name ./test.sh "some_long_sentance"
将上述命令中的shell_name 替换为zsh/bash和一些长句子。
左右两段输出分别对应 zsh 和 bash。
以上两个代码片段的结果都表明 zsh 比 bash 更快。结果中的术语含义如下:
- real是从通话开始到结束的时间。
- 用户是进程在用户模式下花费的 CPU 时间。
- sys是进程在内核中花费的 CPU 时间。
配置文件
Bash在非登录交互式 shell 中读取.bashrc文件,在登录 shell 中读取.bash_profile 文件。
Zsh在交互式 shell 中读取.zshrc ,在登录 shell 中读取 .zprofile 。
交互式 shell 是一种简单的 shell,它接收用户的输入并返回所需的输出。
登录 shell 是我们登录会话时以用户 ID 执行的第一个进程。
按键绑定
在命令行中输入命令时执行的任何键盘操作(例如按 Ctrl+E 移动到行尾)都称为键绑定。它使用完全不同的语法。
Bash 使用.inputrc 和 bindbuiltIn将键绑定到readline命令。
Zsh 使用内置的 bindkey将键绑定到zle 小部件。
迅速的
Bash 从PS1设置提示符,其中包含反斜杠转义符,例如\a ,而 zsh 包含百分号转义符,例如%d。bash PROMT_COMMAND 的功能在 zsh 中可通过precmd实现。Zsh
还提供了进行各种自定义的方法。
完成
这两个 Shell 都提供了命令补全和切换到花式模式等功能。bash 通过包含bash_completion来实现,而 zsh 则通过运行compinit来实现。
更多关于 zsh补全系统的信息。
脚本差异
-
zsh 和 bash 对变量的处理方式相同。假设
我们有一个变量$var
,两个 shell 都会取
var 的值,并按空格分隔它。对于每个空格
分隔的部分,如果包含通配符且与
现有文件匹配,则用匹配列表替换模式。为了获取
的值,var
我们需要$var
-
bash 中数组的长度是从 0 到 length-1,而
在 zsh 中则是从 1 到 length。 -
Bash 有额外的通配符模式,可以通过 启用。在 zsh 中,也可以通过使用 或来实现更简单的原生语法。
shopt -s
extglobsetopt ksh_glob
setopt extended_glob
zsh 有一些很棒的功能,例如Glob 限定符和widcard 模式,而 Bash 却没有。网上有很多 zsh 配置框架。它们可以方便地帮助你开始使用一些强大的功能。
文章来源:https://dev.to/jasmin/a-brief-difference- Between-zsh-and-bash-5ebp