为什么下面的 perl 代码,
mkdir("foo");
print "foo: $!\n";
mkdir("foo");
print "foo: $!\n";
将输出以下内容(在没有 的目录中foo
)
perl ./asdf.pl
foo:
foo: File exists
但删除foo
以下内容
$ perl <<EOF
mkdir("foo");
print "foo: $!\n";
mkdir("foo");
print "foo: $!\n";
EOF
吞掉错误并输出,
foo:
foo:
答案1
你想引用这个词EOF
。从文档 ( man bash
) 中,
如果 的任何部分
word
被引用,则分隔符是删除引号的结果word
,并且此处文档中的行不会扩展。
所以它看起来像,
$ perl <<'EOF'
EOF
如果EOF
不加引号,则$!
在发送到 Perl 之前从 shell 中插入 。
$ cat <<EOF
mkdir("foo");
print "foo: $!\n";
mkdir("foo");
print "foo: $!\n";
EOF
mkdir("foo");
print "foo: \n";
mkdir("foo");
print "foo: \n";