一、适用范围
1、bash是Linux和Unix系统的默认Shell,而zsh需要用户自行安装。
2、在macOS Catalina(10.15)及之前版本,macOS默认使用bash作为Shell,而在macOS Big Sur(11.0)中,默认使用zsh作为Shell。
3、zsh的设计目标是提供一个更加强大易用的Shell,而bash则希望提供一个功能全面和易学易用的Shell。
二、命令行自动补全
1、zsh相比bash在命令行自动补全方面更加强大。
2、bash中,输入部分命令或文件路径时按Tab键,如果有多个可能的完成方案,什么也不会发生。而zsh会显示一个菜单和候选项列表,在按Tab键再次时,可以循环这些变量并自动将其输入到命令行。
3、在zsh中,可以使用Tab键自动补全任何带有斜杠的命令/文件名字,比如路径、文件夹等。
三、命令别名
1、zsh和bash都支持命令别名,区别在于在zsh中别名的定义可以通过关键字alias完成,而在bash中则是用关键字alias定义别名。
alias ll='ls -alF' # bash定义别名
alias ll='ls -lah' # zsh定义别名
2、在zsh中,可以使用全局关键字global来定义全局别名,全局别名可被所有shell使用:
global ll='ls -lah' # 定义全局别名
四、历史命令
1、zsh和bash都允许使用上下箭头键来浏览历史命令。
2、在bash中,可以按Ctrl + R键直接搜索历史命令。而在zsh中,可以使用Alt + R键,也可以使用内置的历史命令搜索功能,使用history关键字:
history # 显示所有历史命令
history | grep ^ls # 搜索以"ls"开头的历史命令
五、提示符
1、在bash中,可以使用$PS1变量来定义提示符。而zsh中则有两个主要的提示符变量$PROMPT和$RPROMPT。
2、$PROMPT是主提示符,$RPROMPT是右边的提示符,可以显示一些额外的信息,比如当前git分支、虚拟环境等:
zsh配置提示符,显示当前目录、git分支、虚拟环境:
PROMPT='%2~ $(git_prompt_info)${venv_info} %# '
RPROMPT=''
六、插件和框架
1、zsh有许多流行的插件和框架可供选择,比如oh-my-zsh、zgen和antigen等。这些插件和框架可以帮助用户快速和容易地配置和定制zsh。
2、bash中也有许多插件和框架,比如bash-it和liquidprompt等,但它们在bash中的使用率没有zsh高。
七、设置默认的shell
chsh -s /bin/zsh # zsh设为默认shell
chsh -s /bin/bash # bash设为默认shell
echo $SHELL # 查看当前用的是哪种shell
如果你不喜欢其中一种shell而又想使用它, 那么你可以每次进入后使用exit退出。
七、总结
1、bash和zsh都是功能强大的命令行Shell,但由于zsh的设计目标是提供更加强大易用的Shell,所以zsh在许多方面比bash更加优秀。
2、当然,如果你只是需要简单的Shell,则bash也足够了。
OK!现在知道zsh还是bash怎么选了吧?