linux脚本 X$ var,为什么Shell脚本比较经常使用x $ VAR = xyes?

本文探讨了在Shell脚本中测试变量是否为空时遇到的问题,特别是在不同版本的Bash和其他Shell中的兼容性问题。文章提供了两种可靠的测试方法,并解释了为何在现代Shell脚本中仍然需要考虑这些古老技巧。

我知道这个约定有两个原因:

http://tldp.org/LDP/abs/html/comparison-ops.html

在复合测试中,即使引用字符串变量也可能不够。如果$ string为空,[-n“ $ string” -o“ $ a” =“ $ b”]可能会导致某些版本的Bash出错。安全的方法是在可能为空的变量后面添加一个额外的字符[[x $ string“!= x -o” x $ a“ =” x $ b“](“ x的”取消)。

其次,在除Bash之外的其他shell中,尤其是较旧的shell中,不存在用于测试空变量的测试条件(例如“ -z”),因此:

if [ -z "$SOME_VAR" ]; then

echo "this variable is not defined"

fi

如果您希望在各种UNIX环境中实现可移植性,而在这些环境中您不能确定默认的shell是Bash以及它是否支持-z测试条件,那么使用Bash会更安全,如果使用[ x $ SOME_VAR“ =” x“],因为那样总是可以达到预期的效果。从本质上讲,这是一个用于查找空变量的古老的Shell脚本技巧,尽管有更清洁的方法可用,但今天它仍用于向后兼容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值