declare -a MY_ARRAY=()
在bash中以这种方式声明数组是否会将所有数组元素都启动为0?
如果没有,如何将数组元素启动到0?
答案 0 :(得分:16)
您的示例将声明/初始化一个空数组。
如果要初始化数组成员,可以执行以下操作:
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中的数组不是固定长度(索引也不必是连续的)。因此,除非您知道数字应该是什么,否则无法初始化数组的所有成员。
答案 1 :(得分:2)
Bash数组不是固定长度数组,因此您无法预初始化所有元素。索引数组也不稀疏,因此您无法按照您的思维方式使用默认值。
但是,可以使用关联数组和缺失值的扩展。例如:
declare -A foo
echo "${foo[bar]:-baz}"
这将为任何丢失的密钥返回“baz”。作为替代方案,您可以实际设置一个用于丢失密钥,而不仅仅是返回默认值。例如:
echo "${foo[bar]:=baz}"
这个备用调用不仅会返回“baz”,而且还会将值存储到数组中供以后使用。根据您的需要,任何一种方法都适用于您定义的用例。
答案 2 :(得分:-1)
是的,它会启动一个空数组并将其分配给MY_ARRAY
。您可以使用以下内容进行验证:
#!/bin/bash
declare -a MY_ARRAY=()
echo ${#MY_ARRAY} # this prints out the length of the array