Bash Here 文档中的 Perl 脚本(不输出变量)?

Bash Here 文档中的 Perl 脚本(不输出变量)?

为什么下面的 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";

相关内容