2010-06-17 38 views
0
bash-3.00$ cat arr.bash 
#!/bin/bash 

declare -a myarray 
myarray[2]="two" 
myarray[5]="five" 

echo ${#myarray[*]} 
echo ${#myarray[@]} 

bash-3.00$ ./arr.bash 
2 
2 

兩者都給出了數組元素的個數。那麼兩者有什麼區別?

回答

0

沒有區別。從bash手冊頁:

$ {#名[下標]}擴展到 長度$ {的名稱[下標]}。如果 下標是*或@,則擴展是 數組中元素的數量。

4

在這種情況下,沒有區別。當您展開數組並且擴展名被引號包圍時,兩個「所有元素」下標會有所不同。

"${array[*]}膨脹以"two five"

"${array[@]}擴展到"two" "five"(即字)。

2

沒有區別。它們都給出數組中的元素的數量。當您在雙引號中使用數組擴展"${array[*]}"並將IFS設置爲默認值以外的某個值時,會出現差異。

$ array=(1 2 3) 
$ echo "${array[*]}" 
1 2 3 
$ saveIFS=$IFS 
$ IFS="," 
$ echo "${array[*]}" 
1,2,3 
$ IFS=$saveIFS 
相關問題