bash脚本将元素添加到数组

正如我们所看到的,我们可以通过分别指定其索引或者关联键来向索引或者关联数组添加元素。
在索引数组的情况下,我们也可以通过使用+=运算符来添加到数组的末尾添加元素:

$my_array=(foo bar)
$my_array+=(baz)

如果我们现在打印数组的内容,我们会看到元素已成功添加:

$echo "${my_array[@]}"
foo bar baz

可以一次添加多个元素:

$my_array=(foo bar)
$my_array+=(baz foobar)
$echo "${my_array[@]}"
foo bar baz foobar

要将元素添加到关联数组中,我们必须指定它们的关联密钥:

$declare -A my_array
# Add single element
$my_array[foo]="bar"
# Add multiple elements at a time
$my_array+=([baz]=foobar [foobarbaz]=baz)

bash脚本从数组中删除元素

要从数组中删除元素,我们需要知道它的索引或者其密钥在关联数组的情况下,并使用“unset”命令。
让我们看看一个例子:

$my_array=(foo bar baz)
$unset my_array[1]
$echo ${my_array[@]}
foo baz

Bash数组开始于0:

$echo ${!my_array[@]}
0 2

它对关联数组同样有效:

$declare -A my_array
$my_array+=([foo]=bar [baz]=foobar)
$unset my_array[foo]
$echo ${my_array[@]}
foobar

要删除整个数组:

$unset my_array
$echo ${!my_array[@]}
如何在Bash脚本中使用数组

bash使用declare创建索引或者关联数组

我们可以使用“decless命令”显式创建数组:

$declare -a my_array

在bash中声明它用于设置变量和属性。
在这种情况下,由于我们提供了“-a”选项,因此已使用“My_Array”名称创建了“索引数组”。

可以以相同的方式创建关联数组:我们唯一需要更改的是使用的选项:我们必须使用-A选项:

$declare -A my_array

这是创建Bash中的关联数组的唯一方法。

bash动态创建索引数组

我们可以使用更简洁的语法创建索引数组,只需分配一些值:

$my_array=(foo bar)

在这种情况下,我们一次将多个项目分配给数组,但我们也可以一次插入一个值,指定其索引:

$my_array[0]=foo

bash数组操作

打印bash数组的值

要显示数组的所有值,我们可以使用以下shell扩展语法:

$echo ${my_array[@]}

或者

$echo ${my_array[*]}

两个语法让我们访问数组的所有值并产生相同的结果,除非它引用了扩展。

区别:
在这种情况下,出现差异:在第一种情况下,在使用@时,扩展将导致数组的每个元素的单词。
在执行“循环”时,这会立即清除。

例如,假设我们有一个有两个元素的数组,“foo”和“bar”:

$my_array=(foo bar)

执行“For”循环将产生以下结果:

$for i in "${my_array[@]}"; do echo "$i"; done
foo
bar

当使用*,并引用变量时,将生成单个“结果”,包含数组的所有元素:

$for i in "${my_array[*]}"; do echo "$i"; done
foo bar

打印bash数组的键

它可以检索和打印索引或者关联数组中使用的键,而不是它们各自的值。

$my_array=(foo bar baz)
$for index in "${!my_array[@]}"; do echo "$index"; done
0
1
2

同样适用于关联数组:

$declare -A my_array
$my_array=([foo]=bar [baz]=foobar)
$for key in "${!my_array[@]}"; do echo "$key"; done
baz
foo

bash脚本获取数组的大小

我们可以通过使用特定的shell扩展来检索数组的大小(其中包含的元素数):

$my_array=(foo bar baz)
$echo "the array contains ${#my_array[@]} elements"
the array contains 3 elements
日期:2020-07-07 20:54:30 来源:oir作者:oir