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
兩者都給出了數組元素的個數。那麼兩者有什麼區別?
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
兩者都給出了數組元素的個數。那麼兩者有什麼區別?
沒有區別。從bash
手冊頁:
$ {#名[下標]}擴展到 長度$ {的名稱[下標]}。如果 下標是*或@,則擴展是 數組中元素的數量。
在這種情況下,沒有區別。當您展開數組並且擴展名被引號包圍時,兩個「所有元素」下標會有所不同。
"${array[*]}
膨脹以"two five"
"${array[@]}
擴展到"two" "five"
(即字)。
沒有區別。它們都給出數組中的元素的數量。當您在雙引號中使用數組擴展"${array[*]}"
並將IFS設置爲默認值以外的某個值時,會出現差異。
$ array=(1 2 3)
$ echo "${array[*]}"
1 2 3
$ saveIFS=$IFS
$ IFS=","
$ echo "${array[*]}"
1,2,3
$ IFS=$saveIFS