2016-08-02 35 views
3

我知道shell變量是當前shell的局部變量,而環境變量(export被指定的變量)則被傳遞到shell分支的子進程上。Shell變量在雙引號Perl單線程中可見

當我運行雙引號內的Perl的一個班輪我可以從fork版perl的訪問的過程(本地)shell變量:

$ FOO=bar 
$ perl -we "print qx'echo $FOO'" 
bar 

這是爲什麼?

+1

比較:'perl -we'打印qx/echo $ ENV {FOO} /'。 –

回答

5

這是因爲雙引號字符串中的shell變量插值。

$FOO變量在父殼體中評估 - 其中$FOO的值爲bar - 並插入到帶引號的字符串中。

因此您實際運行的Perl代碼是:

print qx'echo bar' 
+0

[這裏](http://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash)是一個更詳細的解釋。 – jreisinger

4

這是因爲你的shell翻譯的$FOO它提交給Perl之前的內容。

如果你想用這個$FOO從你的Perl環境,做到這一點:

perl -we "print qx'echo \$FOO'" 

的外殼應通過它扔掉之前轉換到$\$

+0

另一種方法是對內聯Perl代碼使用單引號:'perl -we'print qx'\''echo $ FOO'\'''''。 – jreisinger