Bash
和有什麼區別一個ray_[]和d_一個rr一個是[∗]一個nd{array[]} and{大批@@@}?什麼時候使用一個比另一個?
使用以下程式碼:
#! /bin/bash declare -a arr=("element1" "element2" "element3" "element4" ) echo "1" echo "${arr[@]}" echo "2" echo ${arr[*]}
輸出是:
1 element1 element2 element3 element4 2 element1 element2 element3 element4
所以輸出是一樣的。
那麼什麼時候強制使用一種方法而不是另一種方法呢?
比較這三個循環的輸出:
#!/bin/bash declare -a arr=("this is" "a test" "of bash") echo "LOOP 1" for x in ${arr[*]}; do echo "item: $x" done echo echo "LOOP 2" for x in "${arr[*]}"; do echo "item: $x" done echo echo "LOOP 3" for x in "${arr[@]}"; do echo "item: $x" done
上面的腳本將產生這個輸出:
LOOP 1 item: this item: is item: a item: test item: of item: bash LOOP 2 item: this is a test of bash LOOP 3 item: this is item: a test item: of bash
使用
"${array[@]}"
雙引號將保留數組中的項目,即使它們包含空格,而使用"${array[*]}"
或會失去該資訊${array[*]}
。這在手冊頁的“數組”部分中進行了解釋
bash(1)
,其中說:可以使用 引用數組的任何元素
${name[subscript]}
。需要大括號以避免與路徑名擴展發生衝突。如果下標是@
或*
,則單詞擴展為 name 的所有成員。只有當單詞出現在雙引號中時,這些下標才會有所不同。如果單詞是雙引號,則${name[*]}
擴展為單個單詞,每個數組成員的值由 IFS 特殊變數的第一個字元分隔,並將${name[@]}
name 的每個元素擴展為單獨的單詞…