8
declare -a MY_ARRAY=()

bash中以这种方式声明数组是否会将所有数组元素初始化为0?

如果不是,如何将数组元素初始化为 0?

4

3 回答 3

18

您的示例将声明/初始化一个空数组。

如果要初始化数组成员,请执行以下操作:

declare -a MY_ARRAY=(0 0 0 0) # this initializes an array with four members

如果你想初始化一个有 100 个成员的数组,你可以这样做:

declare -a MY_ARRAY=( $(for i in {1..100}; do echo 0; done) )

请记住,bash 中的数组不是固定长度的(索引也不必是连续的)。因此,除非您知道数字应该是什么,否则您无法初始化数组的所有成员。

于 2013-05-10T16:46:13.583 回答
2

关联数组的默认值

Bash 数组不是固定长度的数组,因此您不能预先初始化所有元素。索引数组也不是稀疏的,因此您不能真正按照您的想法使用默认值。

但是,您可以使用关联数组来扩展缺失值。例如:

declare -A foo
echo "${foo[bar]:-baz}"

这将为任何丢失的键返回“baz”。作为替代方案,您实际上可以为缺少的键设置一个,而不仅仅是返回一个默认值。例如:

echo "${foo[bar]:=baz}"

这种备用调用不仅会返回“baz”,还会将值存储到数组中以供以后使用。根据您的需要,任何一种方法都应该适用于您定义的用例。

于 2013-05-10T16:51:06.887 回答
-1

是的,它启动一个空数组并将其分配给MY_ARRAY. 您可以通过以下方式进行验证:

#!/bin/bash
declare -a MY_ARRAY=()
echo ${#MY_ARRAY} # this prints out the length of the array
于 2013-05-10T16:39:29.763 回答