我有个小工具,工作在命令行,用 Bash 写的。
在工具重构的过程中,为了保持心情愉快,必须甩开 Bash 语言 :)
上一回已经说过了,在一众脚本语言中,最后选择了 abs

几周下来,最大的感受是,八阿哥(#462, #464)。
是那种隐秘的也就算了,以咱的水平,一般遇不到。
在我这既阳春又白雪的简单脚本里,居然能遇到俩个,就有点讨厌。

弃暗投明吧,路过了 Ruby,Oil,最终转投了 Elvish

刚深入时,内心是抗拒的。
一加二,不是 1 + 2,而是 + 1 2,要什么九年义务教育。
要什么 Emacs/Lisp,要什么前缀表达式,我就用 Vim,就用中缀不行嘛。

但是转念用了一段时间吧,发现也还好,为什么呢,
因为命令行工具,主要处理的还是字符串呀。
而且不违心的说,这种表达式还是非常精致的。

经过几天的磨合,陆续发现了很多亮点,忍不住吹嘘一波,

  1. 赤裸的 Shell 代码,不穿任何外套
    洒脱程度甩开 Abs/Ruby/Perl/Python 几条街,就差报警了

    # 合法的 elv 代码,完全调用 Shell
    ip a | /bin/grep 1 | wc -l
    
  2. 健全的异常处理,既照顾了原生语义,也照顾了 Shell 调用
    原生语义有 try/except/else/finally,Shell 调用有 ?()$ok

    if (not ?(/bin/false)) {
        echo "false"
    }
    
  3. map 语法无需逗号/引号/冒号,格式统一,方便编辑
    映射/散列/哈希表,最后一个元素,结尾加不加逗号,最烦人了

    # 注意: 与号(&)和等号(=),与中间的变量名之间不能有空格,这是语法
    var map1 = [
        &key1=  value1
        &key2=  [
            &key2.1= value2.1
            &key2.2= value2.2
        ]
    ]
    
  4. 下个版本(0.18)将内置 flags 模块了,写小工具更方便了,嚯嚯~

  5. 没发现 Bug,好不容易怀疑一个,结果还是咱自己不会用,尴尬~