@
Jirajine 用了些 emoji 快速表明态度
> parser 太随意,一部分传给 python ,一部分传给 bash ,语义严重不一致。
我看它是,但凡 命令 和 参数 中,有出现未定义的标识符,就当作外部命令处理
感觉也说得过去?❓能举些你觉得容易出错的例子吗?
> 还是因为缺乏结构化数据类型,只能一边 parse 字符串,一边拼接出特定的字符串给别的程序 parse
elvish 能直接传递 list map 给其他命令?从其他命令接收来的 str ,不 parse ,咋变成 list map 的?
❓你是说 xml json 序列化、反序列化 这些库吗?
> go/rust 的正则库大差不差,功能完全够了吧
相比 pcre C# 而言,还差很多。😑你这样说,显得人家在不务正业。。
> 其他“高级特性”实现的话就做不到线性时间复杂度了
写应用确实速度快(是因为用 DFA 实现吗?)
但在 交互式 shell 中,更需要功能丰富啊
正则库不支持,❓不就要苦逼地写代码,自己实现相同逻辑了么。。
> 关键是它标准库有常用字符串和正则函数,这些 bash 根本实现不了
✔️确实,字符串处理是 bash 的弱项。这应该也属于 shell 的基础设施的
正则匹配的话,还是有个 [[ $s =~ regex ]] 可用的
> 一堆不同语言的转义,考虑的太多
🔁再次重复:
bash 的 'pattern' 足够好了,连 \ 都是本身的意思:'\'
最多只需考虑 ' ( elvish 也需写成 'str1''str2')
> glob 和正则共用不少符号但语义又不一样,增加心智负担。elvish 的 glob 简单很多
🔁再次重复:
elvish 的 glob 也用了 ? * ** {} ?[],❓语义不是也和正则不同吗?
❓elvish 的 glob 也比 bash 的复杂呀:
bash:*.[ch]、[a-z].go
elvish:*.?[set:ch]、?[range:a-z].go
> bash 几乎总是需要 quoting ,如果处理含空格字符串的话,空格有时候作为分隔符,有时候又不是,还有 IFS ,处理起来难写难用且易错。
需要作为一个参数:"$s"
需要 word splitting:$s
❓足以应付大多数场景了吧?或者你举些例子?
> bash 的 数组和 map ……不能表达结构化数据
✔️确实,但对于日常交互式使用而言,一般也足够了。再复杂,也适合上脚本了
> 默认按换行符 split 。如果不希望这种转换可以用 slurp
🤔还行
bash 作为一个参数:"$s"、"$(...)"
elvish 作为一个参数:$s 、(... | slurp)
❓还是感觉 bash 整体代价较低?
❓elvish 默认是按 \n 切割的。如何像 bash 那样,按 IFS 来切割 (...) 呢?