与 zsh 相比,bash 的独特之处

Tim*_*Tim 67 shell bash zsh

我已经成为 zsh 用户有一段时间了(在那个 tcsh 之前和那个 csh 之前)。我对它很满意,但想知道 zsh 中是否存在任何引人注目的 bash 功能。相反,是否有 bash 中不存在的 zsh 功能。我目前的感觉是 bash 更好:

  • 如果您已经熟悉它并且不想学习新的语法。
  • 默认情况下,它将存在于大多数 *nix 机器上,而 zsh 可能需要额外安装。

不想在这里开始一场宗教战争,这就是为什么我只是在寻找仅存在于一个外壳中的功能。

0x8*_*x89 40

zsh 适用于火神。;-)

说真的:bash 4.0 有一些以前只能在 zsh 中找到的特性,比如 ** globbing:

% ls /usr/src/**/Makefile
Run Code Online (Sandbox Code Playgroud)

相当于:

% find /usr/src -name "Makefile"
Run Code Online (Sandbox Code Playgroud)

但显然更强大。

根据我的经验,bash 的可编程完成比 zsh 的性能要好一些,至少在某些情况下(例如,为 aptitude 完成 debian 包)。

bash 必须Alt + .插入!$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>
Run Code Online (Sandbox Code Playgroud)

for this. zsh can also expand a command in backtics, so

% cat `echo blubb | sed 's/u/a/'`<Tab>
Run Code Online (Sandbox Code Playgroud)

yields

% cat blabb
Run Code Online (Sandbox Code Playgroud)

I find it very useful to expand rm *, as you can see what would be removed and can maybe remove one or two files from the commmand to prevent them from being deleted.

Also nice: using the output from commands for other commands that do not read from stdin but expect a filename:

% diff <(sort foo) <(sort bar)
Run Code Online (Sandbox Code Playgroud)

From what I read bash-completion also supports completing remote filenames over ssh if you use ssh-agent, which used to be a good reason to switch to zsh.

Aliases in zsh can be defined to work on the whole line instead of just at the beginning:

% alias -g ...="../.."
% cd ...
Run Code Online (Sandbox Code Playgroud)

  • 在 bash 中,`CMe` 为“shell-expand-line”,这将扩展 ``cat `echo blubb | 在我的例子中,sed 's/u/a/'` `` 到`cat blabb` 和`echo $SHELL` 到`echo /bin/bash`。此外,`Cx *` 到“glob-expand-word”,这将扩展 `rm *`。 (8认同)

X-I*_*nce 16

我想指出,在 FreeBSD、OpenBSD 或 NetBSD 上默认没有安装 bash,在 Solaris 10 上也没有默认安装(OpenSolaris 将其作为默认设置),我上次使用 AIX 时,或者默认情况下也未安装 HP-UX 服务器。

此外,在 OpenSolaris 上 /bin/sh 不是 bash。是ksh。作为软件搬运工,我遇到的最大问题是人们认为 /bin/sh 是 bash 并且它会接受 bash 扩展语法。虽然在大多数 Linux 发行版上似乎都是这种情况,但在其他地方并非如此,这真的很烦人。

  • 你是对的。唉,所有这些供应商都确保将 bash 作为额外包安装非常容易。+1 指出脚本中需要 /bin/sh 纯粹主义。 (6认同)

Chu*_*cky 12

虽然我是 bash 用户,但我发现 zsh 的一个功能非常酷:RPS1。

记住:

  • PS1:左对齐提示
  • RPS1:右对齐提示

样本:

当使用类似

PS1=’%B(%h) %m%#%b ‘
RPS1=’(%20<…<%~)'
Run Code Online (Sandbox Code Playgroud)

您会在左侧看到提示,将当前目录推到右侧。当当前行变得太长时,它甚至会消失!这是因为 zsh 足够聪明,可以将 RPS1 的优先级设置为低。

您可以在http://imgur.com/OAZhC 上查看此示例的屏幕截图。


Mag*_*gus 9

Zsh 有拼写更正。如果你是一个字母(或更多),它会弄清楚你的意思。

它还具有更强大的选项卡完成功能,这是我喜欢的。

Zsh 有一个交互式配置实用程序,可以按照您的喜好进行设置。

一些速度测试说 zsh 更快,但我没有注意到任何区别。


car*_*ito 6

我不知道 zsh 不支持的任何 bash 功能。zsh 的设计目标似乎包括支持 bash 添加的任何功能。

我仍然使用 bash 而不是 zsh。我很少遇到 zsh 支持而 bash 不支持的引人注目的功能。多年来 zsh 偶尔出现的问题,或者它在某些系统上不存在,使得它不值得进行转换。

我终于可以在每个 Unix 系统上使用相同的 shell,为了我永远不会使用的功能而破坏它是不值得的。

zsh 中存在但在 bash 中不存在的功能似乎主要是可爱的,但不是日常重要的功能。