bash - 为什么在 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 有一百万种其他方法可以做到这一点,我不需要用制表符替换两个换行符的帮助 - 如果你有兴趣这样做,这里有一个提到几种方法的答案- 我关心为什么它们不同)
解决方案
推荐阅读
- javascript - 将函数传递给 Pug 模板以通过 Javascript 前端中的回调使用
- c++ - gmock - 如何使用 noexcept 说明符模拟函数
- c++ - 如何在自定义容器中正确使用 std::allocator?
- java - 如何使用 android.hardware.camera2 包将媒体图像对象转换为位图?
- mysql - 升级后如何解决这个mysql错误
- google-app-engine - Appengine 运行的是旧版本的代码——堆栈跟踪与源代码不匹配
- git - 本地 git clone 的本地镜像
- node.js - 如何修复 Node-gyp MSBuild.exe` 失败并退出代码:1
- python - 如何在目录中多次找到特定文件夹?
- python - 获取字符串中字符串的特定值