以下适用于Ubuntu但不适用于Yocto(Poky).
root@system:~/# x='abc' root@system:~/# y='' root@system:~/# [[ $(echo $x) != '' ]] && echo true true root@system:~/# [[ $(echo $y) != '' ]] && echo true sh: : unknown operand
在Ubuntu中,最后一行不返回任何内容(如预期的那样).任何想法为什么它在Yocto中抛出错误?
显然,busybox ash的实现相当简单[[
.它是相同的,[
除了它期望一个]]
而不是]
最终的参数.这就错过了为什么它[[
可以是有用的:[[
应该是一个具有特殊解析的关键字,使用它看起来更漂亮并避免各种陷阱(同时添加一些自己的陷阱).我猜他们添加了它,所以在busybox ash上运行了一些未修改的bash脚本.
为避免混淆,我建议不要[[
在busybox中使用.使用[
和引用所有命令替换和参数扩展.