【发布时间】:2021-04-29 19:03:33
【问题描述】:
我有一个脚本,它调用 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 代码?
【问题讨论】:
-
@Mat 为了让人们更容易回答,我只是展示了一个更大的脚本的摘录。我剪切并粘贴错误。感谢您指出。固定的。但问题仍然是引用。
-
仅供参考,你可以将你的 perl 单行代码写成
perl -MTime::HiRes=time -e 'print time'