首页 > 解决方案 > 为什么在 bash 中搜索和替换参数扩展比在 zsh 中慢得多?

问题描述

我正在解决 bash/zsh 中的代码出现问题,并且正在阅读今天的输入 (±2000)。

输入由双换行符分隔(实际输入为 ±2000 行):


vjbzaqs
bovlts

d
r
r
p
d

erxwkjlv
jpoefrlx
kjrwxeld

由于 IFS 是单个字符,我想用制表符替换 2 个换行符(因此我可以将 IFS 设置为制表符并迭代输入):

input="$(cat advent-6.csv)"
input_new=${input//$'\n\n'/$'\t'}
echo $input_new

在 zshell 中,这是即时的:

➜  bash-game time zsh ./advent-6.sh
./advent-6.sh  0.01s user 0.01s system 80% cpu 0.016 total

但是,在 bash 中,这需要大约 42 秒:

➜  bash-game time bash ./advent-6.sh
bash ./advent-6.sh  42.52s user 0.04s system 99% cpu 42.590 total

为什么 zsh 在搜索和替换参数扩展方面的表现比 bash 好得多?

这里发生了什么事?

(注意:我意识到使用 sed/awk 有一百万种其他方法可以做到这一点,我不需要用制表符替换两个换行符的帮助 - 如果你有兴趣这样做,这里有一个提到几种方法的答案- 我关心为什么它们不同)

标签: bashzsh

解决方案


推荐阅读