シンボルとは

コマンド列を別の任意の文字列で置き換えることができます。この文字列を,シンボルといいます。つまり,シンボルとはコマンド列の全体または一部につける別名と言えます。

DCL コマンドの中には,多くのパラメータや修飾子を必要とするために,コマンド列が非常に長くなるものがあります。そこで,シンボルを使用して長いコマンド列を別の文字列でおきかえて短くしたり,コマンド列内で変数として使用したりします。

いったんシンボルを定義すると,その後はシンボルを DCL コマンドと同様に使用することができます。定義したシンボルは,ログアウトするまで有効です。

シンボルを定義する

シンボルを定義するには次のようにします。


    $ シンボル =[=] "DCL コマンド列の全体または一部"    
        (1)                       (2)

  1. シンボル

    コマンド列を置き換える文字列。

    シンボルは 1 〜 255 文字の英数字,ドル記号 ($),アンダーライン (_) の文字列を使用します。先頭は英字,$,_ のいずれかにしなければいけません。(数字は使用できません。)

  2. コマンド列

    置き換えるコマンド列。

    実際にコマンド列を入力するように指定します。

シンボルの使用例




シンボル DSD に,ディレクトリ内のファイルをサイズと作成日時の情報も含めて一覧表示するコマンド列全体を割当てます。


    $ DSD == "DIR/SIZE/DATE"    

DCL コマンドのかわりに DSD と入力するとサイズと作成日時情報も含めたファイルの一覧が表示されます。


    $ DSD 
 
    Directory DKA0:[YAMADA] 
 
    LOGIN.COM;1                1   9-MAY-2001 15:59:46.53    
    MAIL.MAI;1                27  22-JAN-2002 10:41:56.21 
 
    Total of 2 files, 28 blocks. 
    $ 

コマンドの短縮形としてのシンボルを使う際には,必要に応じて追加の修飾子やパラメータを指定することもできます。

次の例では,/OWNER 修飾子を追加し,/SIZE 修飾子のかわりに /SIZE=ALL 修飾子を指定しています。またパラメータとして *.COM を指定しています。


    $ DSD/OWNER/SIZE=ALL *.COM 
 
    Directory DKA0:[YAMADA] 
 
    LOGIN.COM;1                1/9         9-MAY-2001 15:59:46.53  [VMS,YAMADA]    
 
    Total of 1 file, 1/9 blocks. 
    $ 

また,あるコマンドに対し,特定のパラメータを頻繁に指定する場合,そのパラメータもシンボルに含めてしまうことができます。次に例を示します。


    $ DIRCOM == "DIR/SIZE/DATE *.COM"  
    $ DIRCOM 
 
    Directory DKA0:[YAMADA] 
 
    LOGIN.COM;1                1   9-MAY-2001 15:59:46.53    
 
    Total of 1 file, 1 blocks. 
    $ 

シンボルを確認する -- SHOW SYMBOL

シンボルを確認するには,SHOW SYMBOL コマンドを使用します。


    $ SHOW SYMBOL シンボル    

すべてのシンボルを表示する時は,シンボル名のかわりに /ALL 修飾子を使います。


    $ SHOW SYMBOL/ALL    

シンボルを削除する -- DELETE/SYMBOL

シンボルを削除するには次のようにします。


    $ DELETE/SYMBOL シンボル    

すべてのシンボルを削除する時は,シンボルのかわりに /ALL 修飾子を使います。また,シンボルはログアウトすると削除されます。


    $ DELETE/SYMBOL/ALL    

シンボルの省略形

DCL コマンドと同じように,シンボルも省略形を使うことができます。シンボルを定義するときに,シンボル名の中にアスタリスク (*) 文字を入れると,* 以後の文字は省略可能になります。




省略形を指定したシンボル TODAY を定義します。


    $ TOD*AY =  "SHOW TIME"    

省略形を使ってシンボル名を入力します。


    $ TODAY 
       14-FEB-2002  17:54:49    
    $ TODA 
       14-FEB-2002  17:54:54 
    $ TOD 
       14-FEB-2002  17:54:57 

TO は省略形として指定していないため,エラーとなります。


    $ TO 
    %DCL-W-IVVERB, unrecognized command verb - check validity and spelling    
    \TO\
    $ 

ローカル・シンボルとグローバル・シンボル

シンボルには有効範囲の違いで,ローカル・シンボルとグローバル・シンボルの 2 種類があります。一般に,ローカル・シンボルは,計算結果を一時的に格納しておくための変数に使います。グローバル・シンボルは,ユーザの環境を設定するために使います。

イコール記号 1 つ (=) で定義したシンボルのことをローカル・シンボルと言い,イコール記号 2 つ (==) で定義したシンボルのことをグローバル・シンボルと言います。

同じ名前のローカル・シンボルとグローバル・シンボルを定義した場合は,ローカル・シンボルが優先されます。ローカル・シンボルを削除するとグローバル・シンボルを参照できるようになります。

グローバル・シンボルを定義するには,次のようにします。


    $ シンボル == "DCL コマンド列の全体または一部"    

グローバル・シンボルを参照する -- SHOW SYMBOL/GLOBAL

グローバル・シンボルを参照するには,次のようにします。


    $ SHOW SYMBOL/GLOBAL シンボル    

すべてのグローバル・シンボルを表示する時は,シンボル名のかわりに /ALL 修飾子を使います。


    $ SHOW SYMBOL/GLOBAL/ALL    

グローバル・シンボルを削除する -- DELELTE/SYMBOL/GLOBAL

グローバル・シンボルを削除するには,次のようにします。


    $ DELETE/SYMBOL/GLOBAL シンボル    

すべてのグローバル・シンボルを削除する時は,シンボルのかわりに /ALL 修飾子を使います。


    $ DELETE/SYMBOL/GLOBAL/ALL    

コマンド・プロシージャの中でシンボルを使う

コマンド・プロシージャとは DCL コマンドと使用されるデータ行を 1 つのテキスト・ファイルにまとめたものです。( 詳しくは,コマンド・プロシージャを使用する をご覧ください。)

通常,コマンド・プロシージャの中では,ローカル・シンボルを使います。これはコマンド・プロシージャ内で定義されたローカル・シンボルの有効範囲が,そのコマンド・プロシージャの中だけに限られるからです。コマンド・プロシージャの中で定義されたローカル・シンボルは,コマンド・プロシージャの実行を終了すると消去されます。

一方グローバル・シンボルは,DCL コマンド・ライン上でもコマンド・プロシージャの中でも定義,参照,変更,削除をすることができます。そのため,何らかの値を DCL プロンプト・レベルに返す場合や,ユーザの環境を設定する場合に使うことができます。




たとえば,ログイン・コマンド・プロシージャの中で,ユーザがよく使うコマンドの短縮形を定義する場合には,必ずグローバル・シンボルを使う必要があります。次に例を示します。


    $ cd == "set default" 
    $ pwd == "show default" 
    $ who == "show user" 
    $ less == "type /page=save"    

ログイン・コマンド・プロシージャ LOGIN.COM は,ログイン時に一連の DCL コマンドを自動的に実行するためのものです。( 詳しくは,コマンド・プロシージャを使用する をご覧ください。)

変数としてのシンボルを使用する

シンボルは,計算結果を一時的に格納しておくための変数として使うことができます。この機能は主にコマンド・プロシージャの中で使われますが,DCL プロンプト上でも使うことができます。次に例を示します。





    $ x = (1 + 2) * 3 
    $ show symbol x 
      X = 9   Hex = 00000009  Octal = 00000000011    
    $ surname = "山田" 
    $ show symbol surname 
      SURNAME = "山田" 
    $ 

最初の例のようにシンボルに計算結果を代入すると,シンボルは数値変数になります。2 番目の例のように文字列を代入すると,シンボルは文字列変数になります。シンボルがどちらの型になるかは代入時に決定されるので,あらかじめ定義しておく必要はありません。

特別な意味を持つシンボル

いくつかのシンボルは特別な目的のために使用されます。ユーザは必要に応じて,それらのシンボルを参照または上書きすることができます。

$STATUS (グローバル・シンボル)

直前に実行したコマンドやアプリケーションが,正常に実行されたかどうかを示します。正常に実行された場合は奇数が代入されます。異常終了した場合は偶数が代入されます。コマンド・プロシージャなどでアプリケーションを自動実行する場合のエラー処理に使うことができます。

$STATUS の値を調べることで,異常終了に関する情報や対処方法を得られる場合があります。( 詳しくは,ヘルプとシステム・メッセージ をご覧ください。)

$SEVERITY (グローバル・シンボル)

常に $STATUS の下位3ビットの値と等しくなります。この部分は重大度レベルと呼ばれ,アプリケーションが異常終了した際の異常の重大度を示します。

重大度
0 警告 (Warning)
1 正常終了 (Success)
2 エラー (Error)
3 情報 (Information)
4 致命的なエラー (Fatal)

P1 〜 P8 (ローカル・シンボル)

コマンド・プロシージャ実行時に,コマンド・ライン上に指定されたパラメータです。コマンド・プロシージャの中では最大 8 個まで受け取ることができます。パラメータが指定されなかった場合や 8 個未満だった場合には,空文字列が代入されます。( 詳しくは,コマンド・プロシージャを使用する をご覧ください。)

$RESTART (グローバル・シンボル)

バッチ・ジョブを実行するためにコマンド・プロシージャの中で,障害によるバッチ・ジョブの中断から回復する時に使うシンボルです。

シンボルの便利な使い方

シンボルには,DCL コマンドを置き換える以外に,次のような使い方があります。

レキシカル関数の結果を受け取る

レキシカル関数とは,コマンド・プロシージャ中で任意のファイルやシステム等の情報を得るための関数です。レキシカル関数の実行結果は,数値または文字列として返されるので,それをシンボルに代入して保存することができます。( レキシカル関数一覧 に,よく使用されるレキシカル関数の一覧をまとめてあります。)

たとえば,次の例ではレキシカル関数を使って現在のプロセスのユーザ名を表示しています。





    $ u = f$getjpi("","username")    
    $ show symbol u 

文字列中にシンボルを埋め込む

引用符 (') を 2 重に使って,あらかじめ決められた文字列にシンボルの内容を埋め込むことができます。

たとえば,次の例では文字列中に自分のユーザ名を埋め込んでいます。





    $ u = f$edit(f$getjpi("","username"),"trim") 
    $ write sys$output "現在のユーザ名は ''u' です。"    

引用符 (') を使わずに,同様のことを行うには,次のようにします。


    $ write sys$output "現在のユーザ名は " + u + " です。"    

DCL コマンドのパラメータとして使う

DCL コマンドに対するパラメータ,またはパラメータの一部としてシンボルを使うには,シンボルを引用符 (') で囲みます。

次の例は,今年作成されたファイルの一覧を表示します。





    $ thisyear = f$cvtime("today",,"year")    
    $ dir /since=1-jan-'thisyear' 

自作ユーティリティをコマンド定義する

任意のディレクトリにある任意の実行イメージを, DCL コマンドであるかのように定義できます。この場合,定義される実行イメージは DCL の RUN コマンドで実行できることが必要です。

次のようにして定義します。





    $ mytool == "$ sys$login:mytool.exe"    

この場合,グローバル・シンボルを使うのが一般的です。一度シンボルを定義すると,シンボルを削除するか,ログアウトするまで有効です。定義された実行イメージを起動するには,DCL プロンプトで次のように入力します。


    $ mytool