Как выполнить код Perl, хранящийся внутри переменной сценария оболочки?

У меня есть сценарий, который вызывает модуль 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-код в шелл-скрипт в кавычки?

6
задан GeneQ 28 April 2012 в 08:33
поделиться