如何在bash shell脚本中的perl命令调用中使用shell变量?

时间:2012-10-26 20:07:29

标签: perl bash shell awk

如何在bash shell脚本的perl命令调用中使用shell变量?

我在shell脚本中有一个perl命令来评估日期-1。

如何在perl命令调用中使用$myDate

这是我脚本中的部分:

myDate='10/10/2012'

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

我希望使用$myDate代替%m/%d/%y

任何帮助将不胜感激。

谢谢。

6 个答案:

答案 0 :(得分:26)

shell中的变量可以在Perl的%ENV哈希中找到。使用bash(以及其他一些shell),您需要采取额外的步骤“导出”shell变量,以便子进程可以看到它。

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

答案 1 :(得分:6)

将值传递给任何其他程序的方法相同:将其作为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 :(得分:4)

使用"代替'也会在5.24版本中将shell变量传递给perl。

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

答案 3 :(得分:2)

为什么不能这样: $ENV{'PATH'} = $ENV{'PATH'}.":"."/additional/path";

答案 4 :(得分:1)

将值传递给任何其他程序的方法相同:将其作为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 :(得分:1)

对我来说,我需要使用$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'}