2016-10-29 21 views
-2

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

兩個${#x[*]}${#x[@]}打印相同的輸出之間@和*的差的例子。

我明白[email protected]$*之間的區別,但我有興趣查看沒有命令行參數的區別。

+0

'$ {#...}'不會對數組內容進行進一步的shell擴展,所以這兩個表達式* *是相同的。 – chepner

回答

0

除非您有理由使用*,否則請務必使用@擴展。 @被添加來解決問題。

這兩個並不總是展開同樣的。涉及*的麻煩以空格和其他shell元字符開頭(特別是引號,但是$和更多)。

*使元字符保持打開狀態,以便shell再次處理它們,如果你不想讓它們進入數組,那通常是不好的。 @通過展開每個數組元素來保護它們,就像它是一個單獨引用的值一樣,從而保持所有元字符不變。