У меня есть сценарий, который вызывает модуль 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 просто не расширяет команду в $NOW и не передает ее обратному отметке для выполнения?
Я пробовал различные способы встраивания Perl-кода в переменную сценария оболочки, но не смог его получить. правильно.
Кто-нибудь знает, как правильно заключать perl-код в шелл-скрипт в кавычки?