bash的HereDoc中的Perl脚本

前端之家收集整理的这篇文章主要介绍了bash的HereDoc中的Perl脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有可能在bash脚本中写一个perl脚本作为heredoc吗?

这不工作(仅适用于示例)

#/bin/bash
perl <<EOF
while(<>) {
    chomp;
    print "xxx: $_\n";
}
EOF

这里有一些很好的方式如何将perl脚本嵌入到bash脚本中?想要从bash脚本运行perl脚本,不想把它放到外部文件中.

这里的问题是脚本被传递到stdin上的perl,所以尝试从脚本处理stdin不起作用.

字符串文字

perl -e '
while(<>) {
    chomp;
    print "xxx: $_\n";
}
'

使用字符串文字是最直接的方式来编写,尽管如果Perl脚本中包含单引号本身并不理想.

2.使用perl -e

#/bin/bash

script=$(cat <<'EOF'
while(<>) {
    chomp;
    print "xxx: $_\n";
}
EOF
)
perl -e "$script"

如果您使用perl -e将脚本传递给perl,那么您将不会有stdin问题,您可以在脚本中使用任何您喜欢的字符.虽然这样做有点迂回. Heredocs在stdin上输入输入,我们需要字符串.该怎么办?哦,我知道!这要求$(猫< HEREDOC). 确保使用<'EOF',而不是仅使用< EOF来保持bash在heredoc内进行变量插值. 你也可以写这个没有$脚本变量,虽然它现在变得非常毛茸茸!

perl -e "$(cat <<'EOF'
while(<>) {
    chomp;
    print "xxx: $_\n";
}
EOF
)"

过程替代

perl <(cat <<'EOF'
while(<>) {
    chomp;
    print "xxx: $_\n";
}
EOF
)

按照#2的方式,您可以使用名为进程替换的bash功能,该功能可以让您编写<(cmd)来代替文件名.如果你使用这个,你不需要-e,因为你现在传递perl一个文件名,而不是一个字符串.

猜你在找的Bash相关文章