对于Bash脚本中的以下管道:
Bash command | perl -ne 'single line perl command' | Another Bash command
Perl命令只能是单行。如果我想编写更复杂的多行Perl命令怎么样?我可以为每个perl命令行使用多个“-e”选项,例如:
perl -n -e 'command line 1' -e 'command line 2' -e 'command line 3'
或者我可以为多行Perl代码使用“Here Document”(在这种情况下,仍然可以指定perl选项,例如“-n”。)?
如果可以使用“Here Document”,任何人都可以通过示例说明如何使用它。
提前感谢任何建议。
答案 0 :(得分:6)
如果您的Perl脚本太长而无法在一行上控制(使用分号分隔Perl语句),那么bash
非常乐意将您的单引号参数扩展到您需要的多行:
Bash-command |
perl -ne 'print something_here;
do { something_else } while (0);
generally("avoid single quotes in your Perl!");
say q{Here is single-quoted content in Perl};
' |
Another-Bash-Command
'perldoc perlrun'手册也说:
-e commandline
可用于输入一行程序。如果给出
-e
,Perl将不会在参数列表中查找文件名。可以给出多个-e
命令来构建多行脚本。确保在正常程序中使用分号。
-E commandline
表现得像-e,除了它隐式启用所有可选功能(在主编译单元中)。
所以你也可以这样做:
Bash-command |
perl -n -e 'print something_here;' \
-e 'do { something_else } while (0);' \
-e 'generally("avoid single quotes in your Perl!");' \
-e 'say q{Here is single-quoted content in Perl};' |
Another-Bash-Command
如果脚本比20行(大概在10到50之间,有些根据选择)大,那么可能是时候将Perl脚本分离到自己的文件中并运行它。
答案 1 :(得分:4)
对于多行Perl,您只需要用分号分隔命令,而不是传递多个-e
调用。例如:
perl -n -e 'command line 1; command line 2;'
(虽然我通常不会说Perl块本身就是“命令行”)。