如何使用在Perl命令调用shell变量在bash shell脚本?
我有我的shell脚本一个Perl命令对日期-1。
如何使用$myDate
在Perl命令调用?
这是我的脚本部分:
myDate='10/10/2012'
Dt=$(perl -e 'use POSIX;print strftime '%m/%d/%y', localtime time-86400;")
我想用$myDate
代替%m/%d/%y
。
任何帮助将不胜感激。
谢谢。
如何使用在Perl命令调用shell变量在bash shell脚本?
我有我的shell脚本一个Perl命令对日期-1。
如何使用$myDate
在Perl命令调用?
这是我的脚本部分:
myDate='10/10/2012'
Dt=$(perl -e 'use POSIX;print strftime '%m/%d/%y', localtime time-86400;")
我想用$myDate
代替%m/%d/%y
。
任何帮助将不胜感激。
谢谢。
你值传递给任何其他程序以同样的方式:把它作为一个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" )
从shell变量是在Perl的可用%ENV
哈希值。 随着bash
(和其他一些炮弹),你需要采取“出口”你的shell变量的额外的步骤,因此它是子进程可见。
mydate=10/10/2012
export mydate
perl -e 'print "my date is $ENV{mydate}\n"'
使用"
,而不是'
也通过shell变量在5.24版本的Perl。
mydate=22/6/2016
perl -e "print $mydate"
为什么不能是这样的: $ENV{'PATH'} = $ENV{'PATH'}.":"."/additional/path";
你值传递给任何其他程序以同样的方式:把它作为一个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" )
对于我来说,我需要使用$ENV{'VARIABLE'}
传递VARIABLE
在外壳的Perl。 我不知道为什么,只是$ENV{VARIABLE}
没有工作。
例如,
在bash:
#!/bin/bash -l
VARIABLE=1
export VARIABLE
perl example.pl
在Perl:
#!/usr/bin/perl -w
print "my number is " . $ENV{'VARIABLE'}