我有一个脚本,它调用 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 shell 的引用规则难住了。
#/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 代码嵌入到 shell 脚本变量中,但我似乎无法做到正确。
如何在 shell 脚本中正确引用 Perl 代码?