次のコマンドが実行する操作の詳細を知りたいです。
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
。
関連:
- Bashでコマンドの前に変数を設定するのが正当な理由は何ですか?
- このコマンドはどのように合法ですか? ">ファイル1 <ファイル2猫"
- * shシェルではバックティック(「cmd」など)は使用されなくなりましたか?
ksh93
(およびzsh
)には、print
同じことを行うためのシェル組み込みユーティリティがありますecho
。シェルは、対話型シェルの起動時に$ENV
ファイルを指す特別な方法で処理されます。$ENV
シェルスクリプトで汎用変数としてこの変数(または通常は大文字変数)を使用することはお勧めできません。
これに関連する: