home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1996 February
/
VPR9602A.ISO
/
fwindows
/
archive
/
tmedt090.lzh
/
TOOLD101.LZH
/
MAN.LZH
/
FOREACH.MAN
< prev
next >
Wrap
Text File
|
1994-11-20
|
5KB
|
115 lines
FOREACH(1) Reference Manual FOREACH(1)
NAME
foreach - コマンドの繰り返し実行
SYNOPSIS
foreach [-inv] var name1 [name2…]
DESCRIPTION
foreach は、同じコマンドを引数を変えながら何度も実行したい場合に
便利なコマンドである。
foreach コマンドの第1引数varには「変数名」として、英字又は「_」で
始まり、英数字又は「_」ばかりからなる文字列を与える。またその後に
与えるname1、name2…は任意の文字列であるが、それがワイルドカード
を含んでいると展開される。nameは1個以上与えねばならない。
foreach を実行すると「?」を表示して端末からのコマンド行入力待ち状
態になるので、実行させたいコマンドを任意行入力する。CTRL-Zか「en
d」か「END」を入力すると入力が終了し、コマンドの実行を開始する。
foreach はまず、端末から入力されたコマンド行の実行を順次行うが、
このとき、コマンド行の中に「$変数名」あるいは「${変数名}」という
形のものが混ざっていると、それをname1(ワイルドカードの展開が起こ
っている場合は展開後のname1)に置き換えながら実行する。それが済ん
だら、次は「$変数名」をname2に置き換えながら同様のことを行い…と
いうように繰り返す。
また、「$」の後に来る文字列(あるいは「$」に続く「{ }」の中身)が「
変数名」と一致しない場合、その名の環境変数の値に置き換えられる。
但し、「{ }」で囲まない場合、英字又は「_」で始まり、英数字又は「
_」ばかりからなる環境変数名しか扱えない。「$」の後ろに来る文字列
の大文字小文字は区別され、またMS-DOSでは環境変数名は大文字で扱わ
れるので、環境変数の値を利用したい場合は、「$」の後ろは大文字で記
述する必要がある。なお、「$」そのものを記述するには「$$」と書けば
いいようになっている。
各コマンド行の実行中、コマンドが0以外のリターンコードを返すと、f
oreach は実行を中断する。但し、command.comの内部コマンドやバッチ
ファイルを実行する場合、あるいはパイプやリダイレクトを使う場合は、
command.comを使って実行するためリターンコードがいつも0になるので、
常に後続のコマンドが実行される。また、「$」の後ろが変数名でも環境
変数名でもなかった場合も、やはりforeach は実行を中止する。
foreach には次のオプションを指定することもできる。
-i: コマンドのリターンコードが0でなくても実行を中断しない。
-n: 実行すべきコマンドを(標準出力に)表示するだけで実際には実行し
ない。
-v: 実行すべきコマンドを(標準エラー出力に)表示した後実行する。
ここで、-nは-vに優先する。-n指定時には出力が標準出力に出るため、
それをバッチファイルにリダイレクトしておき、バッチコマンドとして
実行することも可能である。
EXAMPLES
foreach i readme *.c *.exe
この場合、変数名は「i」であり、name1は「readme」、name2、name3…
は「*.c」「*.exe」を展開した後の各ファイル名である。
これを実行すると「?」を表示してコマンド入力待ちとなるので、例え
ば次のように入力する。
copy $i $TMP\$i
echo $i is copied
end
するとまず、入力中の「$i」をname1である「readme」に、「$TMP」を環
境変数TMPの値に置き換えながら、入力された2つのコマンド(copyとech
o)を順次実行する。次に、入力中の「$i」をname2に、「$TMP」をやはり
環境変数TMPの値に置き換えながら、2つのコマンドを実行し…というよ
うに、以下name3、name4、…が尽きるまで繰り返される。
注意事項
バッチファイルや内部コマンドの実行をcommand.comを使って行うため、
環境変数COMSPECは必ず設定されていなければならない。
例えば変数名が「i」である場合、端末から入力されたコマンド行に「$
iA」というものが混じっていると、それは「iA」という環境変数の値と
見なされ、しかも(環境変数名は大文字で扱われるため「iA」という名の
環境変数はないので)エラーとなってしまう。このような場合「${i}A」
と書くことによって、意図通り、変数の置き換え+「A」として扱うこと
ができる。またこの方法なら、英数字・「_」以外を名前に含む環境変数
も指定できる。
BUGS
現在のところ、「}」で終わる名前の環境変数を使うことはできない。
UNIXのcshのforeachと違い、name1~nを( )で囲む必要はない(囲んでは
ならない)。
ワイルドカード展開ルーチンは、「" "」などで囲まない限り常に「/」
を「\」に置き換えてしまう(たとえ「*」「,」などが混じっていなくて
も)ので、name1~nの中に「/」が混じっているとそれは常に「\」に変換
されてしまう。但し、foreachの実行開始後に端末から入力するコマンド
ラインに対しては、foreachは自前ではワイルドカード展開を行わないの
で、そのような問題は起こらない。
SEE ALSO
wild(5), setarg(5)