Nat*_*enn 5 windows quotes command-line
我无法理解Windows中perl的命令参数引用.使用以下程序:
use strict;
use warnings;
use File::Find;
use File::Copy;
my $dir = shift;
die 'Usage: perl Folderize.pl <directory>' unless $dir;
die "$dir doesn't exist" unless -d $dir;
Run Code Online (Sandbox Code Playgroud)
我得到不同的结果取决于我是否使用单引号或双引号作为目录.如果我打电话给它'perl script.pl 'H:\Test!'打印"'H:\ Test!' 不存在".但是,如果我打电话给它'perl script.pl "H:\Test!",它的工作正常.为什么会这样?
在命令行上,引用规则是 shell 的权限,而不是程序 (perl) 的权限。Unix shell 的规则与 Perl 的规则类似(双引号插入变量,单引号则不然),但 Windows“shell”有不同的规则。一些主要区别是:
单引号'不是特殊字符
C:>\ dir > 'foo'
将创建一个名为'foo'(引号将包含在文件名中)的文件
""双引号插入看起来像 的环境变量%NAME%,但它不会尝试将 perl 标量变量名称解释为环境变量:
C:>\ perl -e "print '%PATH'"
如果您忘记了,Windows shell 将为您“关闭”您的报价
C:>\ perl -e "print qq/Hello world/
Hello world
即使我忘记使用第二个双引号,这仍然有效。