zsh 中有哪些功能是 bash 缺少的,反之亦然?

zsh 中有哪些功能是 bash 缺少的,反之亦然?

作为一名 Linux 用户,我一直只使用 bash,因为它是我使用的每个发行版的默认设置。使用其他 Unix 系统(例如 BSD)的人似乎更频繁地使用其他 shell。为了更多地学习,我决定尝试一下 zsh。

作为 bash 用户:

  • 我会错过哪些功能?
  • 我应该注意哪些?

答案1

要获得更广泛的答案,请阅读https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences- Between-bash-and-zsh/361957#361957

其他 Stack Exchange 站点上已经有很多关于该主题的活动。据我所知(那是几年前²),我从 bash 切换到 zsh 的经历是,我没有错过任何一件事。我收获了很多;以下是我认为最常使用的简单 zsh 特定功能:

  • 当我偶尔使用 bash 时,我最怀念的 zsh 功能是 autocd:在 zsh 中,执行一个目录意味着更改它,前提是您打开该autocd选项。⁴

  • 另一个非常有用的功能是奇特的通配符。象形文字字符有点难记但非常方便(例如,查找它们通常比编写等效find命令更快)。一些更简单的示例:
        foo*~*.bak=foo*除那些匹配之外的所有匹配*.bak
        foo*(.)= 仅常规文件匹配foo*
        foo*(/)= 仅目录匹配foo*
        foo*(-@)= 仅悬空符号链接匹配foo*
        foo*(om[1,10])= 最近 10 个文件匹配foo*
        foo*(Lm+1)= 仅大小 > 1MB 的文件=在目录及其所有目录中子目录,递归⁴
        dir/**/foo*foo*dir

  • 对于奇特的重命名,zmv内置函数可以很方便。例如,将每个复制filefile.bakzmv -C '(*)(#q.)' '$1.bak'

  • bash 和 zsh 都有一个不错的完成系统,需要显式打开(. /etc/bash_completionautoload -U compinit; compinit)。 Zsh 的可配置性更高,而且通常更精美。

如果您在没有 的情况下运行 zsh .zshrc,它会启动一个交互式菜单,让您选择配置选项。 (某些发行版可能会禁用此功能;在这种情况下,请运行autoload zsh-newuser-install; zsh-newuser-install。)我建议启用推荐的历史记录选项,打开(“新式”)完成,并打开除 之外的“通用 shell 选项” beep。稍后,在您发现更多选项时对其进行配置。

²当时,可编程完成是 zsh 的杀手级功能,但 bash 很快就获得了它。
bash 仅在版本 4 中获得的功能(因此在发布此答案时尚未广泛使用,并且在 macOS 上系统提供的 bash 上不可用)是较小的类型。

答案2

zsh允许您编辑多行命令(请参阅zsh 行编辑器),bash 没有。如果您尝试相同的技巧 ( Ctrl-p),bash 会获取最后一个命令。

答案3

另外,默认的制表符完成比 bash 更好...例如...

~/.e.dTAB 将扩展到~/.emacs.d/zsh 中,bash 将发出蜂鸣声。

答案4

其中 - zsh 中的增强

bash 中的命令which仅显示命令的位置。

在 Zsh 中,which将显示 an 的定义alias、a 的源function以及命令的位置。

假设我们有一个 shell 别名:

alias gg='git log'

在 Bash 中如果我们询问:which gg结果将无效

在 Zsh 中:which gg会给我们...

gg: aliased to git log

假设我们有一个 shell 函数:

hello() {
    echo "Hello World"
}

在 Bash 中,如果我们询问:which hello结果将无效。

在 Zsh 中:which hello会给我们...

hello() {
    echo "Hello World"
}

相关内容