adoyle
V2EX  ›  Bash

统计一下,如果你在用 bash,用什么版本号的 bash?

  •  
  •   adoyle · Jun 3, 2019 · 8056 views
    This topic created in 2601 days ago, the information mentioned may be changed or developed.

    最近在写 Bash shell script,想到 Bash 4.3 有个 nameref 的特性,但是之前版本都是没有的。 而且 Bash 3 也没有 Associative Array。 于是产生一个疑问,写脚本有必要兼容到 Bash 3 吗?

    顺便统计一下,如果你在用 bash,现在用的是什么版本号的 bash ?

    7 replies    2019-06-10 11:51:53 +08:00
    goreliu
        1
    goreliu  
       Jun 3, 2019 via Android
    如果一个环境的 bash 版本只有 3,那就不只是 bash 版本低了,很可能 coreutils、awk、sed 等等版本都很低,除了专门适配,不然不兼容是很自然的。
    mattx
        2
    mattx  
       Jun 3, 2019   ❤️ 1
    可以通过关注常见发行版的 bash 版本, 来判断, 比如 debian 8+, ubuntu 16+
    Kobayashi
        3
    Kobayashi  
       Jun 4, 2019 via Android   ❤️ 1
    最新 5.x 19 年新出,4.0 是 2009 年出的,10 年过去了,这还用问吗?

    恐怕除了 macOS 除了 GPL 3 协议原因,默认 /usr/bin/bash 还是 3 (直接检查 BASH_VERSION 让这些脑残升级),其他发行版最差也得是 4。

    不同版本新特性速查: http://mywiki.wooledge.org/BashFAQ/061 参考来自最好的 Bash wiki
    Kobayashi
        4
    Kobayashi  
       Jun 4, 2019 via Android
    另外,4.x 已经进入维护阶段。根据上面参考链接,4.4 最后新特性添加于 2016 年。
    adoyle
        5
    adoyle  
    OP
       Jun 10, 2019
    @Kobayashi 你说的这些我也知道啊,不代表别人也知道,所以需要来做下统计。
    另外最新版本发布,不代表用户就会主动升级。我问过一些用 mac 的同事,他们都在用 bash 3,因为他们不常用 bash,所以没有升级的需求。
    还是要感谢你的分享。
    Kobayashi
        6
    Kobayashi  
       Jun 10, 2019 via Android
    @adoyle 我也明白主要问题就在 macOS 平台上。不知道你有没有考虑过 BSD,BSD 上 bash 根本没有自带。但是大家都知道 Bash 算是事实上的默认 shell。

    你根本无法满足都有平台,除非你用 POSIX shell。但这样只会让问题变的更麻烦。开发者放弃部分用户也不是不常见。

    这种事情无非是看你怎么选择。
    adoyle
        7
    adoyle  
    OP
       Jun 10, 2019
    @Kobayashi 是的,所以我放弃了 Bash 4.3 及之前版本,主要原因是 shopt -s inherit_errexit 这个选项在 4.4 才加进去,我觉得这个功能非常重要,在老版本很难实现这个功能。况且升级 bash 并不是困难的事,而且现在还有 docker。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5223 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 09:26 · PVG 17:26 · LAX 02:26 · JFK 05:26
    ♥ Do have faith in what you're doing.