# OpenVMS
ユーザーズ・マニュアル

前へ | 次へ | 目次 | 索引

# 第 14 章
DCL によるプログラミング: シンボル，コマンド，式の定義

シンボルは，数値，文字，論理値 (真または偽など) を表す名前です。 DCL コマンド行でシンボルを使用すると，DCL は，シンボルを対応する値に置き換えてからコマンドを実行します。

本章では，次のことについて説明します。

- シンボルの使用

- シンボルの表示

- 他のシンボルに対するシンボルの使用

- シンボルによるデータの格納と操作

- 文字列

- 数値と式の使用方法

- 論理値と式の使用方法

- 式での値タイプの変換

- シンボル・テーブル

- シンボルの値のマスク

- シンボル置換

- コマンド処理の 3 つのフェーズ

- シンボルを使用するための別の方法: 自動的なフォーリン・コマンド

その他の情報については，次のマニュアルを参照してください。

- シンボルとその使い方の追加情報については，『Compaq OpenVMS DCL ディクショナリ』

- 新しいコマンドの定義方法の追加情報については，『OpenVMS Command Definition, Librarian, and Message Utilities Manual』

- Extended File Specifications の環境でのシンボルの使用については，『OpenVMS Extended File Specifications の手引き』

# 14.1 シンボルについて

シンボルは，次のように使用できます。

- コマンド，パラメータ，コマンド行の同意語として使用する。長いコマンド行を入力する代わりにシンボルを使用できる。

- シンボル名を入力するだけでイメージを実行するフォーリン・コマンドを定義する。このコマンドは，DCL に未知のものなので「フォーリン」と形容される。

- コマンド・プロシージャ・ファイルで，変数の条件付き実行や置換などのプログラミング・タスクを実行する。
  シンボルは，式の中の変数として使用したり，コマンド・プロシージャとの間でパラメータを渡すのに使用したりできる。また，READ，WRITE，INQUIRE などの DCL コマンドは，シンボルを使用してデータ・レコードを表す。

たとえば，頻繁にアクセスするディレクトリに省略時の値を設定するシンボルを作成することができます。次のコマンドは，省略時の値を WORK1:[JONES.WORK] ディレクトリに設定する WORK シンボルを定義して使用する方法を示しています。

    $  WORK :== SET DEFAULT DISK1:[JONES.WORK]
    $  WORK
    $  SHOW DEFAULT
       DISK1:[JONES.WORK]

## 14.1.1 論理名とシンボルの違い

論理名とシンボルは似ていますが，使用目的は異なります。論理名とシンボルの機能，用途，その他の性質の違いを次の表に示します。

性質 | 論理名 | シンボル
--- | --- | ---
機能 | デバイス，ディレクトリ，ファイル，キュー，その他のシステム・オブジェクトの指定を表す。 | コマンドまたはコマンド文字列の一部を表す。
用途 | デバイス，ディレクトリ，ファイル，キュー，その他のシステム・オブジェクトの完全な指定の代わりに使用する。論理名は，変換のためにファイル・システムに渡すコマンド文字列パラメータの一部として使用しなければならない。 | コマンド文字列の代わりに使用する。シンボルは，コマンド言語インタプリタによって変換されるコマンド文字列の最初の語として使用しなければならない。
格納 | プロセス，ジョブ，グループ，またはシステム論理名テーブルに格納される。 第 13.10 節 を参照。 | グローバル・シンボル・テーブルとローカル・シンボル・テーブルに格納される。 第 14.10 節 を参照。
作成 | 論理名を作成するには ASSIGN コマンドまたはDEFINE コマンドを使用する。 第 13.3 節 を参照。 | シンボルを作成するには割り当て文 ( = または == ) を使用する。 第 14.2 節 を参照。
表示 | 論理名を表示するには SHOW LOGICAL コマンドまたは SHOW TRANSLATION コマンドを使用する。 第 13.6 節 を参照。 | シンボルを表示するには SHOW SYMBOL コマンドを使用する。 第 14.3 節 を参照。
削除 | 論理名を削除するには DEASSIGN コマンドを使用する。 第 13.4 節 を参照。 | シンボルを削除するには DELETE/SYMBOL コマンドを使用する。 第 14.2.5 項 を参照。

# 14.2 シンボルの使用

ローカルとグローバルの 2 つのタイプのシンボルを作成できます。 ローカル・シンボル には，現在のコマンド・レベルから，および現在のコマンド・レベルで実行されるコマンド・プロシージャからアクセスできます。 グローバル・シンボル には，すべてのコマンド・レベルからアクセスできます。

シンボルは，文字列，数値，レキシカル関数，論理値，別のシンボルを使用して定義できます。シンボル名の長さは 1 〜 255 文字とし，先頭の文字が英字，アンダスコア (_)，ドル記号 ($) でなければなりません。シンボル名の中では，小文字も大文字もすべて大文字として扱われます。

シンボルを作成するには，割り当て文 (= または ==) または文字列割り当て (:= または :==) を使用します。文字列割り当てを使用すると，すべての英字が大文字に変換され，複数のスペースやタブが 1 つのスペースに圧縮されます。文字列割り当ては，DCL コマンドを表すシンボルを作成したり，フォーリン・コマンドを定義したりするのに使用できます (いずれの場合も 255 文字が上限です)。 文字列割り当ての中で文字列が 2 行にわたる場合には，ハイフンを使用します。

注意 Extended File Specifications のある環境で作業をしている場合は，リッチ・テキスト文字セットと他の使用可能なオプションについて，『OpenVMS Extended File Specifications の手引き』を参照してください。

READ と INQUIRE コマンドを使用してもシンボルを作成することができます ( 第 15 章 と 第 16 章 を参照)。

ローカル・シンボルの作成

次の例では，ローカル・シンボル SS が DCL コマンド SHOW SYMBOL に割り当てられます。

    $ SS = "SHOW SYMBOL"

次の例では，ローカル・シンボル DB が DCL コマンド DIRECTORY ACCOUNTS:[BOLIVAR] に割り当てられます。

    $ DB := DIRECTORY ACCOUNTS:[BOLIVAR]

グローバル・シンボルの作成

次の例では，グローバル・シンボル DC は， DCL コマンド行を表すために使用されています。 DCL コマンド DIRECTORY は，シンボル名の入力時に指定の修飾子付きで実行されます。

    $ DC == "DIRECTORY/SIZE=ALL DISK1:[JONES.TAX]MONEY.LIS"

次の例では，グローバル・シンボル READY は DCL コマンド行を表すために使用されています。このシンボル名を入力すると，DCL の PRINT コマンドが指定された修飾子と一緒に実行されます。

    $ READY :== PRINT/CONFIRM/QUEUE=AKI$LN03/NOTIFY/RESTART
    $ READY FILE.DAT

## 14.2.1 DCL コマンドを表すシンボルの使用

DCL コマンドを表すシンボルは，ログイン・コマンド・ファイル(LOGIN.COM) で定義することも， DCL レベルで会話形式で定義することもできます。ログ・コマンド・ファイルでシンボルを定義した場合は，ログインするたびにそのシンボルを使用できますが，シンボルを会話形式で定義した場合は，現在のプロセスの実行中しかシンボルを使用できません。

DCL コマンドと同じ名前を持つシンボルを定義すると，その定義は DCL コマンド名を無効にします。たとえば，TYPE HELP.LST コマンドとして HELP シンボルを定義すると， HELP を入力しても，システムのヘルプ・ユーティリティを起動できなくなります。

## 14.2.2 シンボルの短縮

アスタリスク (*) を使用してシンボルを作成すると，シンボルの短縮形を使用できます。一般に，シンボル定義の短縮形は，シンボルを使用できる状況であればいつでも使用できます。ただし，部分文字列の置換を含むシンボルは例外です。詳細は， 第 14.6.5 項 を参照してください。

シンボルを定義する際には，既存のシンボルが新しいシンボルと置き換えられてしまうことがあります。既存のシンボルがアスタリスクの位置，またはその後まで新しいシンボルと完全に一致する場合には，既存のシンボルは新しいシンボルに置き換えられます。また，アスタリスクの位置まで，またはその後まで既存のシンボルと部分的に一致する名前を持つシンボルを新たに定義することはできません。

次の例は，PR，PRI，または PRIN に短縮できるローカル・シンボル PRINT を作成します。

    $ PR*INT = "PRINT/CONFIRM/QUEUE=AKI$LN03/NOTIFY/RESTART"

指定された修飾子を付けて DCL の PRINT コマンドを実行するには，シンボルのフルネームかその短縮形を使用します。

## 14.2.3 フォーリン・コマンドの定義

DCL 以外のイメージのファイル指定をシンボルに定義すると，そのシンボル名でイメージを実行できます。イメージを実行するシンボルをフォーリン・コマンドといいます。フォーリン・コマンドは，コマンド・インタプリタが DCL コマンドとして認識しないイメージです。 (DCL コマンドのどの要素とも同様に，フォーリン・コマンドの文字数の上限は255 文字です。)

シンボルをフォーリン・コマンドとして定義するときの形式は，次のとおりです。

シンボル名 :=[=] $イメージ・ファイル指定
シンボル名 =[=] "$イメージ・ファイル指定"

シンボル定義冒頭のファイル指定の前のドル記号 ($) は (ドル記号とファイル指定の間にはスペースはない)，イメージの実行要求を意味しています。

イメージ・ファイル指定の場合，省略時のデバイスとディレクトリ名はSYS$SYSTEM に，省略時のファイル・タイプは EXE になります。省略時のファイル・バージョン番号は最も大きいバージョンになります。

フォーリン・コマンドを使用すると，Command Definition ユーティリティによって新しいコマンドを定義することもできます。詳細は，『OpenVMS Command Definition, Librarian, and Message Utilities Manual』を参照してください。

シンボルを指定せずに，フォーリン・コマンドを自動的に実行する方法もあります。詳細については， 第 14.14 節 を参照してください。

次の例では，グローバル・シンボル PRINTALL は，DISK1:[ACCOUNTS]PRINTALL.EXE イメージを実行するように定義されています。

    $ PRINTALL :==   $[ACCOUNTS]PRINTALL

コマンド行で，PRINTALL の後にパラメータが付くことがあります。

次の例では，ファイル指定 RAT.DAT は，PRINTALL で定義されたイメージに渡されるパラメータです。

    $ PRINTALL RAT.DAT

## 14.2.4 シンボルの置換

コマンド・インタプリタは，一重引用符 (') で囲まれたシンボルを検索して，それを変換します。したがって，前に一重引用符が付いたシンボルまたはレキシカル関数を使用してパラメータを指定した場合は，シンボル置換が行われます ( 第 14.12 節 を参照)。それ以外の場合には，コマンド・インタプリタはコマンド行を解析しません。このため，パラメータを受け取るイメージ側で，コマンド行の解析 または評価を行わなければなりません。

## 14.2.5 シンボルの削除

DELETE/SYMBOL コマンドは，シンボルを削除します。グローバル・シンボルを削除するには，/GLOBAL 修飾子を指定します。たとえば，グローバル・シンボル TEMP を削除するには，次のコマンドを入力します。

    $ DELETE/SYMBOL/GLOBAL TEMP

# 14.3 シンボルの表示

SHOW SYMBOL コマンドは，シンボルの値を表示します。個々のシンボルの値を表示するには， SHOW SYMBOL コマンドの後にシンボルの名前を入力します。個々のグローバル・シンボルの値を表示するには，/GLOBAL 修飾子を指定します。 SHOW SYMBOL/ALL コマンドはすべてのローカル・シンボルを， SHOW SYMBOL/ALL/GLOBAL コマンドはすべてのグローバル・シンボルを表示します。

シンボルが整数値を持つ場合，SHOW SYMBOL コマンドは値を 10 進数， 16 進数，8 進数で表示することに注意してください。

次の例では，シンボル PR が表示されます。

    $  SHOW SYMBOL PR
    PR*INT = "PRINT/CONFIRM/COPIES=2/QUEUE=DOC$LN03/NOTIFY/RESTART"

次の例では，シンボル TOTAL に対して整数値が表示されます。

    $ SHOW SYMBOL TOTAL
      TOTAL = 4   Hex = 00000004  Octal = 00000000004

# 14.4 別のシンボルの値としてのシンボルの使用

シンボルを定義しておくと，それを別のシンボルの値として使用することができます。 DCL は，シンボルを使用するコンテキストに応じて，シンボルを文字列または数値として解釈します。

次の例では，整数値 3 をシンボル COUNT に割り当てています。

    $ COUNT = 3

この場合，COUNT の値を別の割り当て文で使用できます。たとえば，COUNT の値が 1 に加算されます。

    $ TOTAL = COUNT + 1

結果の (4) が TOTAL シンボルに定義されます。

## 14.4.1 シンボルの連結

いくつかのシンボルを連結して長い文字列を作成するには，プラス記号(+) を使用できます。それぞれのシンボル名の前後に一重引用符 (') を置けば， 2 つ以上のシンボルを連結することもできます。

シンボル置換の要求については， 一重引用符 (') を参照してください。

次の例では，シンボル "Saturday" と "Sunday" を使用して，シンボル "WEEKEND" が作成されます。

    $ DAY1 = "Saturday, "
    $ DAY2 = "Sunday"
    $ WEEKEND = DAY1 + DAY2
    $ SHOW SYMBOL WEEKEND
       WEEKEND = "Saturday, Sunday"

次の例では，一重引用符を使用して，シンボル NAME と TYPE が連結されます。

    $ NAME = "MYFILE"
    $ TYPE = ".DAT"
    $ PRINT 'NAME''TYPE'

PRINT コマンドは，MYFILE.DAT の内容を印刷します。

## 14.4.2 文字列割り当ての中に含まれるシンボル

文字列割り当ての中にローカル・シンボルを指定するには，コロンと等号 (:=) を使用します。文字列割り当ての中にグローバル・シンボルを指定するには，コロンと 2 つの等号 (:==) を使用します。どちらのタイプのシンボル (ローカルまたはグローバル) の場合も，シンボルを一重引用符 (') で囲みます。そうしないと，DCL はそれをシンボルとは認識しません。

シンボルに空の文字列を定義すると，次の例に示すように，そのシンボルは 0 の値を持つようになります。

次の例は，文字列割り当て文にの中に COUNT シンボルを指定しています。

    $ BARK := P'COUNT'

前の例では，COUNT に整数値 3 を割り当てています。この例では，COUNT は文字列値に変換され，文字 P に追加されます。このとき，ローカル・シンボル BARK は P3 と同じ値を持っています。

次の例では，シンボル A はヌルです。

    $ A = ""
    $ B = 2
    $ C = A + B
    $ SHOW SYMBOL C
       C = 2  Hex = 00000002  Octal = 00000000002

# 14.5 シンボルによるデータの格納と操作

シンボルは，コマンド・プロシージャの中の変数として使用できます。変数には，リテラル値以外のものとして計算したり割り当てたりする値が入ります。たとえば，レキシカル関数の値を変数に割り当てたり，ファイル・レコードの値を変数に読み込んだりすることができます。

式 は，値が組み合わされたものです。コマンド・プロシージャの中では，式は，シンボル割り当て文 (等号の右辺)，IF 文， WRITE コマンドの中で，あるいはレキシカル関数の引数として使用されます。

シンボル定義では，割り当て文の左辺がシンボル名，右辺が式になります。式の中のそれぞれの値 (オペランド とも呼びます) は， 演算子 によって別の値に接続できます。 DCL は式を評価して，その結果をシンボルに割り当てます。式が文字列として評価された場合は，シンボルは文字列値を持ちます。

次の例では，ローカル・シンボル BARK が，3 つの数値を加算する式として定義されています。

    $ BARK = 1 + 2 + 3

オペランドは 1，2，および 3 です。演算子はプラス記号 (+) です。前の例では，評価された式が整数なので，シンボルは整数値を持ちます。

前へ | 次へ | 目次 | 索引