为什么在以下代码段中:
~$ perl -e '
my $var = "SRC=array.c builtin.c eval.c field.c gawkmisc.c io.c \ main.c ";
$var =~ /^\w+=(.*)/;
print "$1\n";
'
array.c builtin.c eval.c field.c gawkmisc.c io.c main.c
\
未在反向引用中打印。 .
显然与字符串文本中的\
匹配,因为捕获是直到行尾,所以为什么不打印呢?
为什么我需要在这种情况下逃避它?
答案 0 :(得分:3)
反斜杠字符很特殊,因为它表示后面的内容不是文字。例如,对于"line 1\nline 2\n"
这样的文本,您会看到"\n"
的两个实例...反斜杠说下面的内容是特殊含义,而n
表示回车。在您的情况下,"\ "
没有特殊含义,因此只打印空格。
如果你真的想看到反斜杠,"\\"
会这样做。
答案 1 :(得分:2)
"\ "
被视为“逃逸空间”。如果您真的想看到\
,则需要在字符串中添加\\
。
如果你仔细观察你的输出,你会看到
io.c main.c
^^
两个空格......
需要进行如此微小的改变:
perl -e '
my $var = "SRC=array.c builtin.c eval.c field.c gawkmisc.c io.c \\ main.c ";
$var =~ /^\w+=(.*)/;
print "$1\n";
'
array.c builtin.c eval.c field.c gawkmisc.c io.c \ main.c