我正在將bash腳本轉換爲Perl。我不確定相當於export
是什麼。Perl中bash導出的等價物是什麼?
LOC=/tmp/1/
export LOC
例如,對於上述兩行,等價的Perl代碼是什麼?
my $LOC = '/tmp/1/';
# what should go here?
我正在將bash腳本轉換爲Perl。我不確定相當於export
是什麼。Perl中bash導出的等價物是什麼?
LOC=/tmp/1/
export LOC
例如,對於上述兩行,等價的Perl代碼是什麼?
my $LOC = '/tmp/1/';
# what should go here?
$ENV{LOC} = "/tmp/1";
的%ENV
內容被傳播到一個Perl腳本的子進程的環境。
模塊的Env(見http://perldoc.perl.org/Env.html)
+1:有趣的......一個警告:它看起來可能很難創建一個新的env變種;這個機制似乎依賴於你在編譯時指定要綁定的環境變量('use Env;')。所以,如果你知道你需要'$ ENV {LOC}',那麼很好:'使用Env qw(LOC);'。如果你決定通過你的腳本的一部分,你需要一個新的env var,你似乎被使用'$ ENV {NEWVAR}'機制而不是模塊'Env'卡住。 –
有趣,但我不相信這是有用的(我從來沒有用過它)。它只是意味着你可以輸入'$ LOC'而不是'$ ENV {LOC}',這可以讓我們更難以看到發生了什麼。 (它把'$ PATH'當作一個Perl數組。) –
bash的內部,你可能想要做這樣的事情:
EXPORT_CMD=/tmp/${0}_exports.bsh
perl ...
chmod +x $EXPORT_CMD
$EXPORT_CMD
rm $EXPORT_CMD
Perl的內部,這樣的:
sub export (@) {
state $exh;
unless ($exh) {
my $export_cmd_path = $ENV{EXPORT_CMD};
open($exh, '>>', $export_cmd_path)
or die "Could not open $export_cmd_path!"
;
}
while (@_ > 1) {
my ($name, $value) = ((uc shift), shift);
# If you want it visible in the current script:
{ no strict 'refs';
${"::$name"} = $value;
}
$exh->print(qq{export $name "$value"\n});
}
}
然後,它只是一個編碼本的問題:
export LOC => '/tmp/1/';
問題是,大多數程序不能更改它們被調用的shell變量。
但不是父shell(這對於這個特定的FAQ來說通常是未說明的需求) – ysth
對環境的任何更改都不會傳播到Linux中的父級。這是因爲在Linux中,每個進程都有自己的環境。但在Windows中,只有一個環境,所以對其進行的任何更改都會顯示在所有進程中。 – shawnhcorey
給**未出生的孩子**過程,而是。 – tchrist