DinoStray
V2EX  ›  问与答

shell 脚本探测变量是否为空, 为什么要加个前缀

  •  
  •   DinoStray · Sep 12, 2020 · 2533 views
    This topic created in 2245 days ago, the information mentioned may be changed or developed.
    if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
        export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
    fi
    

    这个 shell 脚本, if 语句, 是想探测环境变量是否为空, 为啥不直接

    if [ "$KAFKA_HEAP_OPTS" = "" ]
    

    而是在前面加了个 x

    5 replies  •  2020-09-12 22:40:49 +08:00
    lcdtyph
    lcdtyph
    Sep 12, 2020 via iPhone
    1
    为了兼容性,一些 shell 的实现无法正确处理 [ -n = "" ] 这种情况,当你测试的那个变量个是比较特殊(比如"-n")在某些 shell 下会出错
    wd
    wd
    Sep 12, 2020 via iPhone
    2
    陈年陋习 老版本(很老的那种,我感觉我很早就看到这个写法了) bash 可能会有问题吧
    love
    love
    Sep 12, 2020
    3
    不是应该 [[ -z $a ]] && echo empty || echo notempty
    吗
    laycher
    laycher
    Sep 12, 2020
    4
    @love #3 我也觉得是这种写法。不是-z 判断的吗?
    SiliusMo
    SiliusMo
    Sep 12, 2020 via Android
    5
    前缀是为了防止一些 shell 在变量未定义的情况下省略这个变量而不是替换为空字符串,从而使代码变为 `if [ = x ]` 。这样会报 参数过少 的错误。

    然而把变量都用双引号括起来已经解决了这个问题…所以楼主说的第二种情况是完全可以的,这里加前缀 x 应该是多余的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2611 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 183ms · UTC 00:30 · PVG 08:30 · LAX 16:30 · JFK 19:30
    ♥ Do have faith in what you're doing.