エコー前にenvディレクトリが呼び出されるのはなぜですか?

エコー前にenvディレクトリが呼び出されるのはなぜですか?

Cで書かれたプログラムを見ています。このプログラムの問題は、このコード行に依存します。

system("/usr/bin/env echo and now what?");

私はsystem()がコマンドを実行していることを知っています。しかし、なぜこれが起こるのかよくわかりません。

しばしばそれは「エコ、今はどうですか」です。ところで、なぜ「usr/bin/env」を前にする必要がありますか?それはまさにどんな役割を果たしますか?

ベストアンサー1

/usr/bin/envプログラム名の後にプログラムを実行します。環境変数で構成されたディレクトリで、実行可能ファイルとしてプログラム名を見つけますPATH。これは:次にいくつかの環境変数の割り当て、次にプログラム名と引数をenv使用する特別なケースです。これには正確にゼロの変数割り当てがあります。env

/usr/bin/env echo …/bin/echo …パスをハードコーディングしないこと以外は同じです。echoシステムと値に応じて、、、、、、、、…PATH/bin/echo/usr/bin/echo/usr/xpg4/echo/usr/ucb/echo/usr/local/bin/echo/home/bob/bin/echo

ほとんどすべてのシェルに組み込みechoコマンドがあります。シェル組み込みコマンドと外部コマンドの動作に違いがある可能性があります。実際、echo2 つの点でコマンド間に違いがあります。最初の引数が次に始まるとどうなるか-(一部のechoバージョンでは複数のオプションを処理する)バックスラッシュを処理する方法(一部のバージョンでは文字通り印刷し、他のバージョンではエスケープ文字として扱う)。したがって、echoこれらの実装依存の動作を使用したい場合は、強制バージョンが役に立ちます。ほとんどの場合、使用する方が良いですprintf。アンティークを除いて、持ち運び可能で持ち運びできるprintfすべての機能を実行します。echo

サンプルコードに渡されたパラメータを使用すると、エコー実装の選択は重要ではありません。この狂気の理由があれば、それを見つけるためにもう少しコンテキストが必要になるでしょう。

おすすめ記事