我觉得这就有点吹毛求疵了。bash脚本基本都是基于输出cut来cut去的,有些脚本写的,换个locale就跑不了呢。
另外fish语法自然嘛...我觉得bash的语法就很不自然,很别扭,但被迫学会了,所以只要是跟bash一样的语法那就是自然。
fish的语法跟bash很像,但又有很多小改动,这种我就很不喜欢。要么就干脆完全不一样整体重新设计。要么你就容忍那点小问题跟bash保持一致。这种99%一样1%不同的部分就是很烦人的。python 2.x到3.x,print要加个括号就让我烦躁了好多年呢。
fish也有个依葫芦画瓢的oh-my-fish嘛,从github的历史来看诞生时间只比oh-my-zsh晚了14天。zsh和fish都是user friendly interactive shell,都不是用来写脚本的。但zsh不用学抄起來就可以用,偶尔遇到问题再去google。fish还有个启动门槛,虽然这门槛很小,但在两者差不多同时诞生的状态下,这就是拉开差距的关键因素。从这个角度来说,我觉得是zsh的零启动门槛首先获得了更大的用户数,然后才推动了oh-my-zsh的繁荣,然后又反哺了zsh率先完成了闭环。你说的oh-my-zsh名气大只是结果,并不是原因。
【 在 Dieken 的大作中提到: 】
: 向下兼容的不够好,脚本并不通用。help xxx 没有,type 命令选项不一致,未定义的数组展开居然是个空字符串而不是空,bash和fish的which出来命令的路径,zsh居然出来同名函数的定义…… type -p在 bash和fish都是输出路径,在zsh里输出一句话,bash和fish里和命令同名的alias不会破坏自动补全,zsh里就不行,还有 zsh 里有 xxx 别名时,定义 xxx() 函数会来一句报错……
: 其实用 zsh 多只是因为 oh-my-zsh 名气很大,很少人用 zsh 写脚本。
: fish 没历史包袱,语法自然,开箱即用,实乃居家旅行必备,脚本用 bash,标准,交互用 fish,方便,两全其美。
--
FROM 180.111.50.*