配列を宣言しますが、定義しませんか?


14

配列を宣言して定義する方法を示す多くのガイド あります

foo[0]=abc 
foo[1]=def

私が達成しようとしているのは、配列を宣言することですが、すぐに定義する必要がないため、定義しないでください。ほとんどのプログラミング言語では、このようになります

int bar[100];

これはシェルスクリプト言語で可能ですか?

回答:


23

次のように空の配列を作成することにより、変数が配列であることを指定できます。

var_name=()

var_name によって報告される配列になります

$ declare -p var_name
declare -a var_name='()'

例:

var_name=()
for i in {1..10}; do
    var_name[$i]="Field $i of the list"
done
declare -p var_name
echo "Field 5 is: ${var_name[5]}"

これは次のようなものを出力します:

declare -a var_name='([1]="Field 1 of the list" [2]="Field 2 of the list" [3]="Field 3 of the list" [4]="Field 4 of the list" [5]="Field 5 of the list" [6]="Field 6 of the list" [7]="Field 7 of the list" [8]="Field 8 of the list" [9]="Field 9 of the list" [10]="Field 10 of the list")'
Field 5 is: Field 5 of the list

minerz029、@ am:..および要素の定義方法 私は...試しただけ...配列変数に値が素晴らしいことだ定義し、アクセスするために少し例を/アクセス単一の文字列を定義することができます
正確に

うまく..私は括弧が欠落していることを考え出した...
正確に

4

上記の方法に加えて、declareステートメントで配列を作成することもできます。

-aオプションを指定したdeclareステートメントは、変数を配列として宣言するために使用できますが、必須ではありません。すべての変数は、明示的な定義なしで配列として使用できます。実際のところ、ある意味では、すべての変数は配列であり、添え字なしの割り当ては「[0]」への割り当てと同じように見えます。配列の明示的な宣言は、組み込みの宣言を使用して行われます。

declare -a ARRAYNAME

連想配列は次を使用して作成されます

declare -A name.

declareおよびreadonlyビルトインを使用して、配列変数の属性を指定できます。各属性は、配列のすべてのメンバーに適用されます。

配列変数を設定したら、次のようにアクセスします。

${array_name[index]}

1

これは実際にはCと同じです。Cでは、必要に応じて配列を使用できます。ここでは、空の配列を取得して、任意の値を入力できます。

bar=()

その配列の値を取得し、それを出力する単純なForループ:

bar=()
for ((i=0;i<10;i++));
do
    read bar[$i]  #Take Value in bar array
    echo bar[$i]
done

それが役に立てば幸い。


答えの問題は何ですか?なぜ反対票ですか?
マニルッザマンAkash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.