5.1.3 配列
JP1/Advanced Shellでは変数の1つとして,配列を作成および参照できます。
要素番号0から65,535までの,最大65,536個の要素を保持する1次元配列を作成できます。また,2つの要素番号からなる配列で最大65,536×64 個の要素を保持できる2次元配列を作成できます。要素を1つも指定しなかった場合,配列は設定されません。
(1) 配列の作成
配列の作成方法を次に示します。
-
複数の要素を一度に作成する場合(setコマンドを使用する方法)
1次元配列
set -A 配列名 値 値 … set +A 配列名 値 値 …
2次元配列
set -D 配列名 { 値 値 … } { 値 値 … } … set +D 配列名 { 値 値 … } { 値 値 … } …
1次元配列の場合,作成する配列名と配列に登録する要素は区切り文字として半角スペースを1つ以上指定します。
set △-A△配列名△値△値△…
△には半角スペースを1つ以上指定してください。
使用例(1次元配列)
set -A abc 1 2 3 echo ${abc[1]}
→2が標準出力に出力されます。
2次元配列の場合,作成する配列名と配列要素を括る”{“や”}”,および配列に登録する要素は区切り文字として半角スペースを1つ以上指定します。
set△-D△配列名△{△値△値△…△}△{△値△値△…△}△…
△には半角スペースを1つ以上指定してください。
使用例(2次元配列)
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[1][1]}
→5が標準出力に出力されます。
この方法では複数の要素を一度に作成できます。set -Aコマンドおよびset -Dコマンドについては,「9.3 シェル標準コマンド」の「setコマンド(シェルオプションを設定する,配列を作成する,または変数の値を表示する)」を参照してください。
-
1つの要素を作成する場合
1次元配列
配列名[要素番号]=値
2次元配列
配列名[要素番号1][要素番号2]=値
使用例(1次元配列)
abc[0]=1 abc[1]=2 abc[2]=3 echo ${abc[1]}
→2が標準出力に出力されます。
使用例(2次元配列)
abc[0][0]=1 abc[0][1]=2 abc[0][2]=3 echo ${abc[0][1]}
→2が標準出力に出力されます。
この方法では要素を1つずつ作成します。複数の要素を作成する場合は,作成する要素分実行してください。また,要素番号0(abc[0]またはabc[0][0])の配列は,変数と同じになります。
-
複数の要素を一度に作成する場合(setコマンドを使用しない方法)
1次元配列
配列名=(値 値 …)
2次元配列
配列名[]=({ 値 値 … } { 値 値 … } …)
1次元配列の場合,作成する配列名の要素は区切り文字として半角スペースを1つ以上指定します。
配列名=(値△値△…)
△には半角スペースを1つ以上指定してください。
使用例(1次元配列)
abc=(1 2 3) echo ${abc[1]}
→2が標準出力に出力されます。
2次元配列の場合,作成する配列名の要素を括る”{“や”}”,および配列に登録する要素は区切り文字として半角スペースを1つ以上指定します。
配列名[]=({△値△値△…△}△{△値△値△…△}△…
△には半角スペースを1つ以上指定してください。
使用例(2次元配列)
abc[]=({ 1 2 3 } { 4 5 6 }) echo ${abc[1][2]}
→6が標準出力に出力されます。
この方法では複数の要素を一度に作成できます。作成方法の詳細については,「(2) 配列名=(値 値 …)による配列の作成」を参照してください。
(2) 配列名=(値 値 …)による配列の作成
「配列名=(値 値 …)」の形式で定義した1次元配列は,「set -A 配列名 値 値 …」の形式で登録されます。
「配列名[]=({ 値 値 … } { 値 値 … } …)」の形式で定義した2次元配列は,「set -D 配列名 { 値 値 … } { 値 値 … }」の形式で登録されます。
JOBLOGには「配列名=(値 値 …)」および「配列名[]=({ 値 値 … } { 値 値 … } …)」の形式でなく,「setコマンド」が実行されたように出力されます。
配列を「配列名=(値 値 …)」の形式で作成した場合も,配列要素の管理方法はほかの配列と同じです。例えば,次の定義で作成した1次元配列は,「set -A ARRAY x1 x2 x3 x4 x5」で作成した配列と同じです。
- ARRAY=(x1 x2 x3 x4 x5)と定義した場合の配列要素
ARRAY[0]=x1 ARRAY[1]=x2 ARRAY[2]=x3 ARRAY[3]=x4 ARRAY[4]=x5
n※ |
要素 |
---|---|
0 |
x1 |
1 |
x2 |
2 |
x3 |
3 |
x4 |
4 |
x5 |
- 注※
-
nは配列要素番号を示します。
2次元配列についても,配列を「配列名[]=({ 値 値 … } { 値 値 … } …)」の形式で作成した場合,配列要素の管理方法はset -Dコマンドで作成した配列と同じです。例えば,次の定義で作成した2次元配列は,「set -D ARRAY { x1 x2 x3 } { x4 x5 x6 }」で作成した配列と同じです。
- ARRAY[]=({ x1 x2 x3 } { x4 x5 x6 })と定義した場合の配列要素
-
ARRAY[0][0]=x1 ARRAY[0][1]=x2 ARRAY[0][2]=x3 ARRAY[1][0]=x4 ARRAY[1][1]=x5 ARRAY[1][2]=x6
n※1 |
m※2 |
||
---|---|---|---|
0 |
1 |
2 |
|
0 |
x1 |
x2 |
x3 |
1 |
x4 |
x5 |
x6 |
- 注※1
-
nは配列要素番号を示します。
- 注※2
-
mは2次元配列要素番号を示します。
したがって,JOBLOGへの出力,カバレージの採取,およびシェルオプションxtraceの出力は,setコマンドで配列定義をした場合と同じ出力結果になります。
なお,「配列名=()」と定義した場合は,名称が"配列名"で値が空文字列のシェル変数が作成されます。これは「配列名=」と定義した場合と同じです。
(a) 配列の生成例
次に示す変数を使用して,シェル変数を含む配列要素を生成する例を表に示します。
A=a B=b C=c MA=' a b c' ※ MB=d
- 注※
「'」はスペースの有無を明確にするために便宜的に記載しています。実際の変数値には含まれません。
表5‒3 配列要素の生成例 配列定義
生成される配列の内容
生成される配列の数
(a b c)
[0]=a [1]=b [2]=c
3
($A $B $C)
[0]=a [1]=b [2]=c
3
(${A}${B}${C})
[0]=a [1]=b [2]=c
3
($A $B `echo 1`)
[0]=a [1]=b [2]=1
3
($A$B $C)
[0]=ab [1]=c
2
(${A}xyz ${B}stu)
[0]=axyx [1]=bstu
2
($MA $MB)
[0]=a [1]=b [2]=c [3]=d
4
($MA$MB)
[0]=a [1]=b [1]=cd
3
(b) 配列を使用した場合のJOBLOGの出力例
配列の定義例と,それによるJOBLOGの出力例を示します。
1次元配列SEQ1に配列数3の配列要素(x1 x2 x3)を設定する。
SEQ1=(x1 x2 x3) echo ${SEQ1[@]}
→ "x1 x2 x3"が標準出力に出力されます。
配列SEQ1を使用したJOBLOGの出力例を次に示します。
KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 KNAX0724-I ジョブ識別子を割り当てました。Jobid=046187 --------------------------------------------------------------- Advanced Shell 11-00 [ジョブ情報] ジョブ識別子 : 046187 スプールジョブディレクトリパス : /var/opt/jp1as/spool/046187/ 実行日付 : 2015/10/29 システム環境ファイルパス : ジョブ環境ファイルパス : ホスト名 : host01 [Automatic Job Management Systemから渡された環境変数] --------------------------------------------------------------- ******** ジョブコントローラのメッセージ出力 ******** 14:46:13 046187 KNAX0091-I ADSH046187 ジョブが開始しました。 14:46:13 046187 KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 14:46:13 046187 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 14:46:13 046187 KNAX6112-I コマンド(set, 行番号=1)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 14:46:13 046187 KNAX6112-I コマンド(echo, 行番号=2)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 14:46:13 046187 KNAX0098-I ADSH046187 ジョブが終了しました。rc=0 E-Time=0.001s C-Time=0.010s ******** ジョブ定義スクリプトの内容 ******** ***** /home/user001/SAMPLE_JOB6.ash ***** 0001 : SEQ1=(x1 x2 x3) 0002 : echo ${SEQ1[@]} 0003 : ***** パス変換情報 ***** ******** 実行ジョブのSTDERRファイルの内容 ******** KNAX0098-I ADSH046187 ジョブが終了しました。rc=0 E-Time=0.001s C-Time=0.010s ******** ジョブステップの出力 ******** KNAX6380-I ルートジョブのスプールジョブディレクトリにジョブ名を付加します。spool job directory="/var/opt/jp1as/spool/046187-ADSH046187/" KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=0 ******** 実行ジョブのSTDOUTファイルの内容 ******** x1 x2 x3>
-
2次元配列SEQ2に配列数3x2の配列要素({ x1 x2 x3 } { x4 x5 x6 })を設定する。
SEQ2[]=({ x1 x2 x3 }{ x4 x5 x6 }) echo ${SEQ2[@]}
→ "x1 x2 x3 x4 x5 x6"が標準出力に出力されます。
配列SEQ2を使用したJOBLOGの出力例を次に示します。
KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 KNAX0724-I ジョブ識別子を割り当てました。Jobid=046189 --------------------------------------------------------------- Advanced Shell 11-00 [ジョブ情報] ジョブ識別子 : 046189 スプールジョブディレクトリパス : /var/opt/jp1as/spool/046189/ 実行日付 : 2015/10/29 システム環境ファイルパス : ジョブ環境ファイルパス : ホスト名 : host01 [Automatic Job Management Systemから渡された環境変数] --------------------------------------------------------------- ******** ジョブコントローラのメッセージ出力 ******** 15:01:31 046189 KNAX0091-I ADSH046189 ジョブが開始しました。 15:01:31 046189 KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 15:01:31 046189 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 15:01:31 046189 KNAX6112-I コマンド(set, 行番号=1)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:01:31 046189 KNAX6112-I コマンド(echo, 行番号=2)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:01:31 046189 KNAX0098-I ADSH046189 ジョブが終了しました。rc=0 E-Time=0.001s C-Time=0.000s ******** ジョブ定義スクリプトの内容 ******** ***** /home/user001/SAMPLE_JOB7.ash ***** 0001 : SEQ2[]=({ x1 x2 x3 } { x4 x5 x6 }) 0002 : echo ${SEQ2[@]} ***** パス変換情報 ***** ******** 実行ジョブのSTDERRファイルの内容 ******** KNAX0098-I ADSH046189 ジョブが終了しました。rc=0 E-Time=0.001s C-Time=0.000s ******** ジョブステップの出力 ******** KNAX6380-I ルートジョブのスプールジョブディレクトリにジョブ名を付加します。spool job directory="/var/opt/jp1as/spool/046189-ADSH046189/" KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=0 ******** 実行ジョブのSTDOUTファイルの内容 ******** x1 x2 x3 x4 x5 x6
1次元配列SEQ1に,次のように配列要素を代入した変数名を定義し,配列数3の配列を設定する。
ARR1=x1 ARR2=x2 ARR3=x3 SEQ1=($ARR1 $ARR2 $ARR3) echo ${SEQ1[@]}
→ "x1 x2 x3"が標準出力に出力されます。
配列SEQ1を使用したJOBLOGの出力例を次に示します。
KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 KNAX0724-I ジョブ識別子を割り当てました。Jobid=046191 --------------------------------------------------------------- Advanced Shell 11-00 [ジョブ情報] ジョブ識別子 : 046191 スプールジョブディレクトリパス : /var/opt/jp1as/spool/046191/ 実行日付 : 2015/10/29 システム環境ファイルパス : ジョブ環境ファイルパス : ホスト名 : host01 [Automatic Job Management Systemから渡された環境変数] --------------------------------------------------------------- ******** ジョブコントローラのメッセージ出力 ******** 15:10:08 046191 KNAX0091-I ADSH046191 ジョブが開始しました。 15:10:08 046191 KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 15:10:08 046191 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 15:10:08 046191 KNAX6110-I コマンド(ARR1=x1, 行番号=1)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:10:08 046191 KNAX6110-I コマンド(ARR2=x2, 行番号=2)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:10:08 046191 KNAX6110-I コマンド(ARR3=x3, 行番号=3)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:10:08 046191 KNAX6112-I コマンド(set, 行番号=4)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:10:08 046191 KNAX6112-I コマンド(echo, 行番号=5)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:10:08 046191 KNAX0098-I ADSH046191 ジョブが終了しました。rc=0 E-Time=0.002s C-Time=0.000s ******** ジョブ定義スクリプトの内容 ******** ***** /home/user001/SAMPLE_JOB8.ash ***** 0001 : ARR1=x1 0002 : ARR2=x2 0003 : ARR3=x3 0004 : SEQ1=($ARR1 $ARR2 $ARR3) 0005 : echo ${SEQ1[@]} ***** パス変換情報 ***** ******** 実行ジョブのSTDERRファイルの内容 ******** KNAX0098-I ADSH046191 ジョブが終了しました。rc=0 E-Time=0.002s C-Time=0.000s ******** ジョブステップの出力 ******** KNAX6380-I ルートジョブのスプールジョブディレクトリにジョブ名を付加します。spool job directory="/var/opt/jp1as/spool/046191-ADSH046191/" KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=0 ******** 実行ジョブのSTDOUTファイルの内容 ******** x1 x2 x3
-
2次元配列SEQ2に,次のように配列要素を代入した変数名を定義し,配列数3x2の配列を設定する。
ARR1=x1 ARR2=x2 ARR3=x3 ARR4=x4 ARR5=x5 ARR6=x6 SEQ2[]=({ $ARR1 $ARR2 $ARR3 } { $ARR4 $ARR5 $ARR6 }) echo ${SEQ2[@]}
→ "x1 x2 x3 x4 x5 x6"が標準出力に出力されます。
配列SEQ2を使用したJOBLOGの出力例を次に示します。
KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 KNAX0724-I ジョブ識別子を割り当てました。Jobid=046193 --------------------------------------------------------------- Advanced Shell 11-00 [ジョブ情報] ジョブ識別子 : 046193 スプールジョブディレクトリパス : /var/opt/jp1as/spool/046193/ 実行日付 : 2015/10/29 システム環境ファイルパス : ジョブ環境ファイルパス : ホスト名 : host01 [Automatic Job Management Systemから渡された環境変数] --------------------------------------------------------------- ******** ジョブコントローラのメッセージ出力 ******** 15:17:35 046193 KNAX0091-I ADSH046193 ジョブが開始しました。 15:17:35 046193 KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 15:17:35 046193 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 15:17:35 046193 KNAX6110-I コマンド(ARR1=x1, 行番号=1)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX6110-I コマンド(ARR2=x2, 行番号=2)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX6110-I コマンド(ARR3=x3, 行番号=3)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX6110-I コマンド(ARR4=x4, 行番号=4)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX6110-I コマンド(ARR5=x5, 行番号=5)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX6110-I コマンド(ARR6=x6, 行番号=6)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX6112-I コマンド(set, 行番号=7)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX6112-I コマンド(echo, 行番号=8)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 15:17:35 046193 KNAX0098-I ADSH046193 ジョブが終了しました。rc=0 E-Time=0.003s C-Time=0.000s ******** ジョブ定義スクリプトの内容 ******** ***** /home/user001/SAMPLE_JOB9.ash ***** 0001 : ARR1=x1 0002 : ARR2=x2 0003 : ARR3=x3 0004 : ARR4=x4 0005 : ARR5=x5 0006 : ARR6=x6 0007 : SEQ2[]=({ $ARR1 $ARR2 $ARR3 } { $ARR4 $ARR5 $ARR6 }) 0008 : echo ${SEQ2[@]} ***** パス変換情報 ***** ******** 実行ジョブのSTDERRファイルの内容 ******** KNAX0098-I ADSH046193 ジョブが終了しました。rc=0 E-Time=0.003s C-Time=0.000s ******** ジョブステップの出力 ******** KNAX6380-I ルートジョブのスプールジョブディレクトリにジョブ名を付加します。spool job directory="/var/opt/jp1as/spool/046193-ADSH046193/" KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=0 ******** 実行ジョブのSTDOUTファイルの内容 ******** x1 x2 x3 x4 x5 x6
(c) 注意事項
1行に記述できるバイト数は8,192バイトまでです。そのため,配列要素番号を拡張した配列を定義した場合,最大配列数を1行のコマンドラインにすべて記述するとエラーになります。8,192バイトを超える場合は,継続行指定('\')で1行に指定できるバイト数に区切ってください。
継続行指定('\')を使った定義例を次に示します。
- <setコマンドでの定義例>
set -A ARRAY x0\ x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 … x1000 \ x1001 x1002 x1003 x1004 x1005 x1006 x1007 x1008 x1009 x1010 x1011 … x2000 \ : x65001 x65002 x65003 x65004 x65005 x65006 x65007 x65008 x65009 … x65535
- <代入式での定義例>
ARRAY=( x0\ x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 … x1000 \ x1001 x1002 x1003 x1004 x1005 x1006 x1007 x1008 x1009 x1010 x1011 … x2000 \ : x65001 x65002 x65003 x65004 x65005 x65006 x65007 x65008 x65009 … x65535)
(3) 配列の値の参照
配列の値の参照方法を次に示します。
1次元配列の1要素の値を参照する場合
${配列名[要素番号]}
使用例
set -A abc 1 2 3 echo ${abc[1]}
→2が標準出力に出力されます。
-
2次元配列の1要素の値を参照する場合
${配列名[要素番号1][要素番号2]}
使用例
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[1][2]}
→6が標準出力に出力されます。
2次元配列も1次元配列と同様に,配列要素番号に@または*を指定した場合,配列に定義されている値の全要素を参照できます。1次元配列と異なるのは,配列要素番号の指定が2つあるためそれぞれに別々の記号や配列番号を指定できることから,@や*が指定されても,配列要素すべての参照指定とはなりません。${array[n][m]}を指定した場合の参照範囲について次に示します。
表5‒4 ${array[n][m]}を指定した場合の参照範囲 n
m
指定なし
[]
[m]
[@]
[*]
[]
array[0][0]の値
array[0][0]の値
array[0][m]の値
arrayすべて
arrayすべて
[n]
array[n][0]の値
array[n][0]の値
array[n][m]の値
n行のすべて
n行のすべて
[@]
arrayすべて
arrayすべて
m列すべて
arrayすべて
array全て
[*]
arrayすべて
arrayすべて
m列すべて
arrayすべて
aray全て
@と*が混在して指定されている場合,要素番号1に指定した記号を優先します。
array[@][*]と指定した場合array[@][@]とみなし,array[*][@]と指定した場合はarray[*][*]とみなします。
-
配列の要素の値を参照する場合
-
1次元配列の要素の値を参照する場合
参照方法1
${配列名[*]}
使用例
set -A abc 1 2 3 echo ${abc[*]}
→1 2 3が標準出力に出力されます。
参照方法2
${配列名[@]}
使用例
set -A abc 1 2 3 echo ${abc[@]}
→1 2 3が標準出力に出力されます。
参照方法3
"${配列名[*]}"
注 参照方法3の場合,IFSシェル変数の値で区切られます。
使用例
set -A abc 1 2 3 IFS=: echo "${abc[*]}"
→1:2:3が標準出力に出力されます。
参照方法4
"${配列名[@]}"
使用例
set -A abc 1 2 3 echo "${abc[@]}"
→1 2 3が標準出力に出力されます。
-
2次元配列の素の値を参照する場合
参照方法1
${配列名[*][*]}
使用例
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[*][*]}
→1 2 3 4 5 6が標準出力に出力されます。
参照方法2
${配列名[@][@]}
使用例
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[@][@]}
→1 2 3 4 5 6が標準出力に出力されます。
参照方法3
${配列名[1][*]}
使用例
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[1][*]}
→4 5 6が標準出力に出力されます。
参照方法4
${配列名[1][@]}
使用例
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[1][@]}
→4 5 6が標準出力に出力されます。
参照方法5
${配列名[*][1]}
使用例
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[*][1]}
→2 5が標準出力に出力されます。
参照方法6
${配列名[@][1]}
使用例
set -D abc { 1 2 3 } { 4 5 6 } echo ${abc[@][1]}
→2 5が標準出力に出力されます。
これら以外の指定の組み合わせについては,「表5‒4 ${array[n][m]}を指定した場合の参照範囲」を参照してください。
-
配列の値の参照例を次に示します。
- ジョブ定義スクリプトの内容
set -A myArray a01 a02 a03 #myArrayを配列として定義する。 for myElement in ${myArray[*]} #myArrayの全要素をfor文のwordlistsに展開する。 do echo $myElement done
- 標準出力への出力結果
a01 a02 a03
(4) 大量の配列要素を確保する場合のメモリ所要量について
2次元配列では,最大65,536×64個の配列要素の生成ができます。
しかし,2次元配列の生成を実行するプロセスに与えられている使用可能なメモリ量によっては,最大配列要素数を確保できない場合があります。
2次元配列の生成に必要なメモリ量の見積もり式は次のとおりです。
(324+x) × y x:平均配列要素データ長(8の倍数単位に切り上げて指定) y:生成する最大配列要素数(1〜65,536×64)
上記のメモリ所要量と,他の構文などで使用するメモリ所要量との合計が,プロセスで使用可能なメモリ量を超えていないかを確認してください。