下面通過兩個示例,來更加明瞭的解釋他們的區別:
1. $home = "/dev";
$out = system "ls -l $home";(雙引號)
print "out: $out\n";
output:
輸出的是/dev文件夾下的內容;
2. $home = "/dev";
$out = system 'ls -l $home';(單引號)
print "out: $out\n";
output:
輸出的是執行此perl文件時,所在的文件夾下的內容,也就是說$home的值沒被讀取到。
3. $out = system 'ls -l $HOME';(單引號,$HOME是shell變量)
print "out: $out\n";
output:
輸出的是$HOME(/root)文件夾下的目錄,
4. $out = system "ls -l $HOME";(雙引號,這種時候perl會對$HOME進行替換,所以shell將看不到這個變量)
print "out: $out\n";
output:
輸出的是當前文件夾下的目錄內容。
如果使用雙引號的話,可以在前面加反斜槓:
$out = system "ls -l \$HOME";
print "out: $out\n";
總結:對於perl文件中定義的變量,爲了在system中能被正確使用,要使用雙引號;如果爲了shell 變量能被shell讀到,要使用單引號,否則shell看不到美元符號,因爲perl會將它用值替換。