16

bashシェルスクリプトのperlコマンド呼び出しでシェル変数を使用するにはどうすればよいですか?

シェルスクリプトに日付-1を評価するperlコマンドがあります。

$myDateperlコマンド呼び出しでどのように使用できますか?

これは私のスクリプトのセクションです:

myDate='10/10/2012'

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

$myDateの代わりに使用したい%m/%d/%y

どんな助けでもありがたいです。

ありがとうございました。

4

6 に答える 6

33

シェルの変数はPerlの%ENVハッシュで利用できます。(および他のいくつかのシェル)ではbash、サブプロセスに表示されるように、シェル変数を「エクスポート」するという追加の手順を実行する必要があります。

mydate=10/10/2012
export mydate
perl -e 'print "my date is $ENV{mydate}\n"'
于 2012-10-26T20:49:27.410 に答える
7

他のプログラムに値を渡すのと同じ方法:引数として渡します。(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" )
于 2012-10-26T20:14:09.463 に答える
7

"代わりにを使用すると'、バージョン5.24ではシェル変数もperlに渡されます。

mydate=22/6/2016
perl -e "print $mydate"
于 2016-06-22T14:25:24.007 に答える
2

なぜ次のようなものではないのですか? $ENV{'PATH'} = $ENV{'PATH'}.":"."/additional/path";

于 2015-04-09T15:06:00.207 に答える
2

私にとっては、シェルをPerl$ENV{'VARIABLE'}に渡すために使用する必要があります。VARIABLEなぜ単純に機能しなかったのかわかりません$ENV{VARIABLE}

例えば、

Bashの場合:

#!/bin/bash -l
VARIABLE=1
export VARIABLE
perl example.pl

Perlの場合:

#!/usr/bin/perl -w
print "my number is " . $ENV{'VARIABLE'}
于 2018-11-16T23:52:12.787 に答える
1

他のプログラムに値を渡すのと同じ方法:引数として渡します。(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" )
于 2012-10-26T20:39:25.780 に答える