2016-10-29 25 views
-2

x=('hello world' "HELLO")寻找其示出了在bash阵列

两个${#x[*]}${#x[@]}打印相同的输出之间@和*的差的例子。

我明白[email protected]$*之间的区别,但我有兴趣查看没有命令行参数的区别。

+0

'$ {#...}'不会对数组内容进行进一步的shell扩展,所以这两个表达式* *是相同的。 – chepner

回答

0

除非您有理由使用*,否则请务必使用@扩展。 @被添加来解决问题。

这两个并不总是展开同样的。涉及*的麻烦以空格和其他shell元字符开头(特别是引号,但是$和更多)。

*使元字符保持打开状态,以便shell再次处理它们,如果你不想让它们进入数组,那通常是不好的。 @通过展开每个数组元素来保护它们,就像它是一个单独引用的值一样,从而保持所有元字符不变。