我有个小工具,工作在命令行,用 Bash 写的。
在工具重构的过程中,为了保持心情愉快,必须甩开 Bash 语言 :)
上一回已经说过了,在一众脚本语言中,最后选择了 abs。
几周下来,最大的感受是,八阿哥(#462, #464)。
是那种隐秘的也就算了,以咱的水平,一般遇不到。
在我这既阳春又白雪的简单脚本里,居然能遇到俩个,就有点讨厌。
弃暗投明吧,路过了 Ruby,Oil,最终转投了 Elvish。
刚深入时,内心是抗拒的。
一加二,不是 1 + 2
,而是 + 1 2
,要什么九年义务教育。
要什么 Emacs/Lisp,要什么前缀表达式,我就用 Vim,就用中缀不行嘛。
但是转念用了一段时间吧,发现也还好,为什么呢,
因为命令行工具,主要处理的还是字符串呀。
而且不违心的说,这种表达式还是非常精致的。
经过几天的磨合,陆续发现了很多亮点,忍不住吹嘘一波,
-
赤裸的 Shell 代码,不穿任何外套
洒脱程度甩开 Abs/Ruby/Perl/Python 几条街,就差报警了# 合法的 elv 代码,完全调用 Shell ip a | /bin/grep 1 | wc -l
-
健全的异常处理,既照顾了原生语义,也照顾了 Shell 调用
原生语义有 try/except/else/finally,Shell 调用有?()
和$ok
if (not ?(/bin/false)) { echo "false" }
-
map 语法无需逗号/引号/冒号,格式统一,方便编辑
映射/散列/哈希表,最后一个元素,结尾加不加逗号,最烦人了# 注意: 与号(&)和等号(=),与中间的变量名之间不能有空格,这是语法 var map1 = [ &key1= value1 &key2= [ &key2.1= value2.1 &key2.2= value2.2 ] ]
-
下个版本(0.18)将内置 flags 模块了,写小工具更方便了,嚯嚯~
-
没发现 Bug,好不容易怀疑一个,结果还是咱自己不会用,尴尬~