我知道shell變量是當前shell的局部變量,而環境變量(export
被指定的變量)則被傳遞到shell分支的子進程上。Shell變量在雙引號Perl單線程中可見
當我運行雙引號內的Perl的一個班輪我可以從fork
版perl的訪問的過程(本地)shell變量:
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
這是爲什麼?
我知道shell變量是當前shell的局部變量,而環境變量(export
被指定的變量)則被傳遞到shell分支的子進程上。Shell變量在雙引號Perl單線程中可見
當我運行雙引號內的Perl的一個班輪我可以從fork
版perl的訪問的過程(本地)shell變量:
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
這是爲什麼?
這是因爲雙引號字符串中的shell變量插值。
$FOO
變量在父殼體中評估 - 其中$FOO
的值爲bar
- 並插入到帶引號的字符串中。
因此您實際運行的Perl代碼是:
print qx'echo bar'
[這裏](http://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash)是一個更詳細的解釋。 – jreisinger
這是因爲你的shell翻譯的$FOO
它提交給Perl之前的內容。
如果你想用這個$FOO
從你的Perl環境,做到這一點:
perl -we "print qx'echo \$FOO'"
的外殼應通過它扔掉之前轉換到$
\$
。
另一種方法是對內聯Perl代碼使用單引號:'perl -we'print qx'\''echo $ FOO'\'''''。 – jreisinger
比較:'perl -we'打印qx/echo $ ENV {FOO} /'。 –