Bash 指令稿入門
Alex Scriven
Data Scientist
Bash 中有兩種陣列:
In Python: my_list = [1,3,2,4]
In R: my_vector <- c(1,3,2,4)
在 Bash 中,建立數值索引陣列有兩種方式。
1. 先宣告,不加入元素
declare -a my_first_array
2. 同時建立並加入元素
my_first_array=(1 2 3)
記住:等號兩側不要有空白!
在 Bash 中不使用逗號分隔陣列元素:
這樣是錯的:
my_first_array=(1, 2, 3)
這樣才正確:
my_first_array=(1 2 3)
array[@] 可取回所有元素。請注意,存取這些屬性時,Bash 需要在陣列名稱外加上花括號。my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
#array[@] 取得。echo ${#my_array[@]}
4
用方括號存取陣列元素。
my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
用索引設定陣列元素。
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)my_first_array[0]=999echo ${my_first_array[0]}
999
$,像是 $my_first_array[0]=999 會失敗。使用 array[@]:N:M 表示法來「切片」取得子陣列。
N 為起始索引,M 為要回傳的元素數量。my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
用 array+=(elements) 來附加到陣列。
例如:
my_array=(300 42 23 2 4 33 54 67 66)my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
若附加時沒有用括號會怎樣?來看看。
例如:
my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66
字串 10 會被接到第一個元素後面。不是我們想要的!
bash --version 檢查In Python:
my_dict = {'city_name': "New York", 'population': 14000000}
In R:
my_list = list(city_name = c('New York'), population = c(14000000))
只能用 declare 語法(且使用大寫 -A)來建立關聯式陣列。
你可以先宣告再加入元素,或在同一行完成。
來做一個關聯式陣列:
declare -A city_details # 先宣告city_details=([city_name]="New York" [population]=14000000) # 加入元素echo ${city_details[city_name]} # 用鍵作索引取得值
New York
或是,用一行同時建立並指派關聯式陣列
declare -A city_details=([city_name]="New York" [population]=14000000)
用 ! 來取出關聯式陣列的「鍵」
echo ${!city_details[@]} # 回傳所有鍵
city_name population
Bash 指令稿入門