2006/10/25

[DOS]expansion

DOSの変数展開の話。

DOSの変数展開は、他の多くのシェルと同様にいくつかに分かれる。
通常の変数、引数変数、forで宣言した変数、setlocal enabledelayedexpansionで展開され、最終的に他のコマンドやバッチファイル およびcallによる関数等として使用される。

展開される順序は以下の順序になる。

%var%形式の変数, 引数(%n)

引数変数nは0だとシェルのパス、1~9なら当該バッチ(または関数)の引数に展開される。コード読み込み時に展開されるため、for文などの中に入れるとループ処理が始まる前に解釈され、ループ処理中は固定値になってしまう。また、入れ子にできないため、%var[%index%]%のような表記もできない。

for文の変数

for文で宣言する変数。ループ毎に展開される。

遅延展開変数。

!var!形式の変数。コマンド呼び出しとして解釈される直前に展開される。setlocal enabledelayedexpansionを宣言すると、対応するendlocalまでの間で使用可能になる。通常の変数などを入れ子にできる

以下のコードを実行すると、 setlocal enabledelayedexpansion set var[1]=aaa for /l %I in (1, 1, 1) do (     set index=1     echo var[%index%]     echo var[%I]     echo !var[%index%]!     echo !var[%I]! ) endlocal echoの出力は、一つ目が`var[]'、二つ目が`var[1]'、三つ目は`ECHOは <ON>です。'、4つ目が`aaa'。意図するところは4つめだろう。

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

<< ホーム