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 に答える