Bash 脚本入门
Alex Scriven
Data Scientist
Bash 中有两类数组:
在 Python 中:my_list = [1,3,2,4]
在 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[@] 可返回所有元素。注意,访问这些属性时需在数组名外加花括号。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 检查在 Python 中:
my_dict = {'city_name': "New York", 'population': 14000000}
在 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 脚本入门