Как использовать переменные оболочки в командном вызове perl в оболочке bash script?
Как использовать переменные оболочки в командном вызове perl в оболочке bash script?
У меня есть команда perl в моей оболочке script для оценки даты -1.
Как я могу использовать $myDate
в вызове команды perl?
Это раздел в моем script:
myDate='10/10/2012'
Dt=$(perl -e 'use POSIX;print strftime '%m/%d/%y', localtime time-86400;")
Я хочу использовать $myDate
вместо %m/%d/%y
.
Любая помощь будет оценена.
Спасибо.
Ответы
Ответ 1
Точно так же вы передаете значения в любую другую программу: передайте ее как arg. (Возможно, у вас возникнет соблазн генерировать код Perl, но это плохая идея.)
Dt=$( perl -MPOSIX -e'print strftime $ARGV[0], localtime time-86400;' -- "$myDate" )
Обратите внимание, что код не всегда возвращает вчерашнюю дату (так как не все дни имеют 86400 секунд). Для этого вам нужно
Dt=$( perl -MPOSIX -e'my @d = localtime time-86400; --$d[4]; print strftime $ARGV[0], @d;' -- "$myDate" )
или
Dt=$( perl -MDateTime -e'print DateTime->today(time_zone => "local")->subtract(days => 1)->strftime($ARGV[0]);' -- "$myDate" )
или просто
Dt=$( date --date='1 day ago' +"$myDate" )
Ответ 2
Переменные из оболочки доступны в хеше Perl %ENV
. С помощью bash
(и некоторых других оболочек) вам нужно выполнить дополнительный шаг "экспорта" вашей переменной оболочки, чтобы она была видимой для подпроцессов.
mydate=10/10/2012
export mydate
perl -e 'print "my date is $ENV{mydate}\n"'
Ответ 3
Использование "
вместо '
также передает переменные оболочки perl в версии 5.24.
mydate=22/6/2016
perl -e "print $mydate"
Ответ 4
Точно так же вы передаете значения в любую другую программу: передайте ее как arg. (Возможно, у вас возникнет соблазн генерировать код Perl, но это плохая идея.)
Dt=$( perl -MPOSIX -e'my($m,$d,$y) = split qr{/}, $ARGV[0]; --$d; print strftime "%m/%d/%y", 0,0,0, $d,$m-1,$y-1900;' -- "$myDate" )
Ответ 5
Почему бы не что-то вроде:
$ENV{'PATH'} = $ENV{'PATH'}.":"."/additional/path";