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

2020-09-12 16:58:41 +08:00
 DinoStray
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi

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

if [ "$KAFKA_HEAP_OPTS" = "" ]

而是在前面加了个 x

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

然而把变量都用双引号括起来已经解决了这个问题…所以楼主说的第二种情况是完全可以的,这里加前缀 x 应该是多余的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706420

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX