†REXXのどろぬま†

コマンドライン引数の扱い

作成開始日 2025.05.05
最終更新日

ARG関数を使用する場合

REXXでは、コマンドライン引数をARG(n)関数で取得することができる。ただし、全ての引数がARG(1)に受け渡される。複数の引数をスペースやカンマで区切って指定しても、すべて1つの文字列として扱われる(REXXリファレンスに明記されてる)。

例えば、次のような引数を表示するだけのスクリプトを作成すると;

/* myprog.cmd */
say '引数の数は' ARG()
say '第1引数は'  ARG(1)
say '第2引数は'  ARG(2)
実行結果は次のようになる;
C:\>myprog my name is taro
〜実行結果〜
引数の数は 1
第1引数は my name is taro
第2引数は
複数の引数をプログラム中で使用する場合は、このARG(1)の文字列を適宜分解して使用することになるが、考えようによっては、この方が便利かも知れない。少なくとも、引数の数が事前に判らない場合、とりあえず全部受け取れるのはメリットの方が大きい。

ARG命令を使用する場合

非常に紛らわしいが、REXXには同じくARGという引数取得命令もある。基本的な使い方は;
/* myprog2.cmd */
ARG a1 a2 a3
say '第1引数は'     a1
say '第2引数は'     a2
say '第3引数以降は' a3
実行結果は;
C:\>myprog2 my name is taro
〜実行結果〜
第1引数は MY
第2引数は NAME
第3引数以降は IS TARO
このように、ARG命令には以下のような特長がある。

@引数がスペースで分割される:引数の順序が決まっているような場合は、頭から順番に取り出せる方が便利。順不同のスイッチなんかの場合は別だが、その場合はBの特長が役に立つ。さらに、PARSEと組み合わせることで、引数の区切りをスペース以外の文字にすることもできる。

A引数が全て大文字化される:DOSやOS/2はのコマンドラインは、原則的に大文字・小文字を区別しないのので(もちろん例外はある)、コマンドのオプションなどが初めから大文字に統一されていると、便利なことは多い。また、後述のように、PARSEと組み合わせれば大文字・小文字を区別するようにもできる。

B最後の変数に残りの引数がまとめて入る:したがって、引数を受け取る変数を1つしか指定しなければ、すべての引数がその変数に入ることになり、ARG関数と同じように扱える。

ARG命令とPARSEの組み合わせ

ARG命令にPARSEと組み合わせることで、かなり柔軟な処理ができるようになる。

大文字・小文字をそのまま受け取る;

/* myprog3.cmd */
PARSE ARG a1 a2 a3
say '第1引数は'     a1
say '第2引数は'     a2
say '第3引数以降は' a3
C:\>myprog3 My name is Taro
〜実行結果〜
第1引数は My
第2引数は name
第3引数以降は is Taro
区切り文字を変更する('is'で区切った);
/* myprog4.cmd */
PARSE ARG a1 'is' a2
say '第1引数は' a1
say '第2引数は' a2
C:\>myprog4 My name is Taro
〜実行結果〜
第1引数は My name
第2引数は Taro
この他、区切りを変更したいが、大文字化は残しておきたい場合には、PARSE UPPERを指定する。


【REXXのどろぬま目次】 【ホーム】