next up previous contents
Next: ファイル名の置換(展開) Up: シェルの機能 Previous: シェルの機能

プログラムの実行

シェルはユーザが端末から入力したコマンドを実行する機能を持っています。 コマンドの入力が完了するとそれを解析し、何をすべきかを決定します。 シェルに対して入力された文字列はコマンドラインと呼ばれ、一般的に次の様な形をしてい ます。

$ コマンド名 [引数 1 引数 2 引数 n]

行頭の $ はシェルがユーザからのコマンドを受け付ける状態にあることを示す プロンプトで、 ユーザがタイプするものではありません。引数を必要としないコマンドもたくさん ありますから省略することもできます。コマンド名や各引数間は一般にホワイ トスペース文字と呼ばれる「スペース」あるいは「水平タブ」で区切ります。 コマンドラインでホワイトスペース文字が重複した場合は区切りとして認識されるだけで、 重複した個数については無視されます。いま、

$ echo I drink coffee
と入力したとします。するとシェルはこのコマンドラインを走査し、実行すべきコマンド名 として行頭から最初の区切り文字までの文字列 echoを取り出します。続いて次の 区切り文字までの文字列 I echoへの最初の引数として取り出します。 同様な操作をコマンドラインの最後まで繰り返し drink coffeeを第2、 第3引数として取り出します。 コマンドラインの解析が終了するとシェルはここで取り出した3つの引数を echoコマンドに渡しその終了を待ちます。echoコマンドが終了するとプロンプトを表示 してユーザから次のコマンドラインの入力を待ちます。 それではもう一つ、
$ echo Do you        enjoy              minix?
を試してみてください。echoの出力は次のようになったはずです。
Do you enjoy minix?
これは先に説明したように区切り文字が重複していても 区切りとして認識するだけ で重複個数は無視されるために起こります。echoコマンドは受け取っ た引数を1個のスペースで分けてユーザの端末に表示するだけなのです。

この2つの例からコマンドラインを解釈するのはechoなどのシェルによって起動される コマンドではなく、シェル自身だということを理解してください。 シェルにより起動されたechoはシェルから渡された引数を見て仕事をして いるだけで、実際にコマンドラインとして入力された文字列がどのようなものか、あるいは どのような指示がされたかなどは知らないのです。

ちょっとせっかちな話しなのですが、後の例ではシェルはコマンドと引数の分離、実行 だけではなく、もう少し複雑な仕事をしています。それは次項で。



Riichiro Saito
1995年08月29日(火) 11時41分26秒 JST