¿Cómo usar las variables de shell en la llamada al comando perl en un script de shell bash?

¿Cómo usar las variables de shell en la llamada al comando perl en un script de shell bash?

Tengo un comando perl en mi script de shell para evaluar la fecha -1.

¿Cómo puedo usar $myDate en la llamada al comando Perl?

Esta es la sección en mi script:

 myDate='10/10/2012' Dt=$(perl -e 'use POSIX;print strftime '%m/%d/%y', localtime time-86400;") 

Quiero usar $myDate en lugar de %m/%d/%y .

Cualquier ayuda será apreciada.

Gracias.

De la misma manera que pasa valores a cualquier otro progtwig: páselo como un arg. (Podría sentirse tentado a generar código Perl, pero esa es una mala idea).

 Dt=$( perl -MPOSIX -e'print strftime $ARGV[0], localtime time-86400;' -- "$myDate" ) 

Tenga en cuenta que el código no siempre devuelve la fecha de ayer (ya que no todos los días tienen 86400 segundos). Para eso, querrías

 Dt=$( perl -MPOSIX -e'my @d = localtime time-86400; --$d[4]; print strftime $ARGV[0], @d;' -- "$myDate" ) 

o

 Dt=$( perl -MDateTime -e'print DateTime->today(time_zone => "local")->subtract(days => 1)->strftime($ARGV[0]);' -- "$myDate" ) 

o simplemente

 Dt=$( date --date='1 day ago' +"$myDate" ) 

Las variables del shell están disponibles en el hash %ENV Perl. Con bash (y algunos otros shells) debe dar el paso adicional de “exportar” su variable de shell para que sea visible para los subprocesos.

 mydate=10/10/2012 export mydate perl -e 'print "my date is $ENV{mydate}\n"' 

Usar " vez de ' también pasa variables de shell a perl en la versión 5.24.

 mydate=22/6/2016 perl -e "print $mydate" 

De la misma manera que pasa valores a cualquier otro progtwig: páselo como un arg. (Podría sentirse tentado a generar código Perl, pero esa es una mala idea).

 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" ) 

¿Por qué no algo como: $ENV{'PATH'} = $ENV{'PATH'}.":"."/additional/path";