このコマンドの機能は何ですか(異常な割り当てとリダイレクト)

このコマンドの機能は何ですか(異常な割り当てとリダイレクト)

次のコマンドが実行する操作の詳細を知りたいです。

PASSING=0 FAILED=0 > log_${ENV} print "Test Started at `date`\n"

ベストアンサー1

このコマンドは、次のように書き換えることができます。

PASSING=0 FAILED=0 print "Test Started at `date`\n" >log_${ENV}

リダイレクトは、コマンドラインの任意の時点で発生する可能性があるためです。

リダイレクトはコマンドの出力をprint名前付きファイルに送信しますlog_${ENV}(またはlog_$ENV中括弧はここでは何もしません)。ここでは、ENV現在の環境に存在するいくつかの値を含むシェル変数でなければなりません。

PASSINGに2回割り当てると、FAILEDコマンド環境で両方の変数が設定されますprint。この行を実行した後は存在しません(以前にスクリプトに存在しない限り、この場合、このコマンドラインを実行しても元の値は変更されません)。

これら2つの変数を使用しないようであるためprint(スクリプトや関数、または私たちが知らないもの以外)、この変数の意図が何であるかを言うのは難しいです。

このprint機能はテキスト文字列を唯一の引数として使用します。ここで、文字列の一部は古いスタイルのコマンド置換であり、これは呼び出されるdate前にコマンドの出力に展開されますprint。より近代的なコマンドの代替構文を使用すると、パラメータを"Test Started at $(date)\n"

全体的な効果はおそらく(何によって異なりますprint)名前がvalueに依存する特定のファイルに指定されたテキスト文字列を書き込みます$ENV

関連:


ksh93(およびzsh)には、print同じことを行うためのシェル組み込みユーティリティがありますecho。シェルは、対話型シェルの起動時に$ENVファイルを指す特別な方法で処理されます。$ENVシェルスクリプトで汎用変数としてこの変数(または通常は大文字変数)を使用することはお勧めできません。

これに関連する:

おすすめ記事