Perl の Time::HiRes モジュールを呼び出して経過時間を計算するスクリプトがあります。基本的に、スクリプトは次のワンライナーを渡すことで時間を取得します。
use Time::HiRes qw(time); print time
バックティックを介して Perl インタープリターに送信し、結果を取得します。
#/bin/sh
START_TIME=`perl -e 'use Time::HiRes qw(time); print time'`
END_TIME=`perl -e 'use Time::HiRes qw(time); print time'`
ELAPSED_TIME=$(echo "($END_TIME - $START_TIME)" | bc)
echo $ELAPSED_TIME
よりモジュラーな方法で書き直そうとしましたが、Bash シェルの引用規則に困惑しています。
#/bin/sh
CALCULATE='bc'
NOW="perl -e 'use Time::HiRes qw(time); print time'"
START_TIME=`$NOW`
[Some long running task ...]
ELAPSED_TIME=$(echo "($NOW - $START_TIME)" | $CALCULATE)
echo $ELAPSED_TIME
Bash は、何かが適切に引用されていないと文句を言います。Bash が $NOW でコマンドを展開し、それをバッククォートに渡して実行しないのはなぜですか?
シェル スクリプト変数に Perl コードを埋め込むさまざまな方法を試しましたが、うまくいきません。
シェルスクリプト内の Perl コードを正しく引用するにはどうすればよいですか?