で次のコマンドを評価するeval <command>
方法は?eval
eval
評価用のシェルサブプロセスを作成しますか<command>
?それ以外の場合は、
eval
現在のシェルプロセスを使用して評価しますか?
気づく
eval
組み込みプロセスなので、それeval
自体では子プロセスは作成されません。<command>
実行前に子プロセスが組み込み<command>
プロセスであるかどうかに応じて、それを実行するために作成することも、生成しないこともあります。
上記のコマンドを評価するために使用されるシェルサブプロセスは、コメントに記載されている2つのうちの1つではありません。
ありがとうございます。
ベストアンサー1
うまくいくのは、eval
パラメータの解析、変数の拡張などを実行してから、結果の文字列を正常に実行することです。
たとえば、次のようになります。
$ i=ls
$ eval $i
これは次のようにeval
置き換えられます。$i
ls
それからls
通常どおりコマンドを実行します(その後、プロセスが実行されfork()
ます)。exec()
ls
しかし、そうすれば
$ i="echo hello"
$ eval $i
hello
echo hello
これは組み込みプロセスとして実行されるため、新しいプロセスは作成されません。
変数を設定すると、シェルが作成されないことがわかります。
$ a=0
$ i="a=100"
$ eval $i
$ echo $a
100
$a
現在のシェル内で実行されている場合にのみ100に設定できます。
したがって、これはeval
実際にパーサ自体であり、現在のシェルで行われます。結果この文字列は、他のコマンドと同様に、新しいプロセスを作成することも、生成しないこともあります。