次のコマンドを評価するためにシェルプロセスを作成して評価が機能しますか?

次のコマンドを評価するためにシェルプロセスを作成して評価が機能しますか?

で次のコマンドを評価するeval <command>方法は?eval

  • eval評価用のシェルサブプロセスを作成しますか<command>

  • それ以外の場合は、eval現在のシェルプロセスを使用して評価しますか?

気づく

  • eval組み込みプロセスなので、それeval自体では子プロセスは作成されません。
  • <command>実行前に子プロセスが組み込み<command>プロセスであるかどうかに応じて、それを実行するために作成することも、生成しないこともあります。

上記のコマンドを評価するために使用されるシェルサブプロセスは、コメントに記載されている2つのうちの1つではありません。

ありがとうございます。

ベストアンサー1

うまくいくのは、evalパラメータの解析、変数の拡張などを実行してから、結果の文字列を正常に実行することです。

たとえば、次のようになります。

$ i=ls
$ eval $i

これは次のようにeval置き換えられます。$ilsそれから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実際にパーサ自体であり、現在のシェルで行われます。結果この文字列は、他のコマンドと同様に、新しいプロセスを作成することも、生成しないこともあります。

おすすめ記事