这样的问题有点难以知道从哪里开始。
您所指的qx 是Perl 的一个特性。 “q*”或“Quote and Quote-like Operators”记录在 Perl “operators”手册页中(通常您会使用 man perlop 在安装了 Perl 的系统上阅读)。
具体来说,qx 是“命令的引用执行”...本质上是 Perl 中 `(反引号或“命令替换”)运算符的另一种形式。
换句话说,如果你执行如下命令:
perl -e '$foo = qx{ls};打印 "\n###\n$foo\n###\n";'
... 在安装了 Perl 的系统上,它应该运行 Perl,它应该评估 (-e) 您提供的表达式(引用)。换句话说,我们正在命令行上编写一个小程序。这个程序首先创建一个变量,其内容将是一个“标量”(这是字符串或数字的 Perl 术语)。我们将通过执行ls 命令捕获的输出(= 或赋值运算符)分配回此变量($foo)。之后,我们将打印变量的内容(无论ls 命令会打印什么),并在这些内容之前和之后加上### 行。
Perl 的qx 运算符(以及其他各种 q* 运算符)的一个怪癖是它允许您使用几乎任何您喜欢的字符来分隔命令。例如perl -e '$bar = qx/pwd/;' 将捕获pwd 命令的输出。当您使用通常用作文本括号、大括号、方括号等的分隔符的任何字符时,qx 命令将查找适当的匹配分隔符。如果您使用任何其他标点符号(或非字母数字字符?),那么相同的字符也将是终止分隔符。这种后来的行为类似于旧的sed 实用程序和ed 行编辑器的“替换”命令中的一个特性,并受到其启发;而括号、大括号等的匹配是 Perl 的新奇事物。
这就是如何捕获 shell 脚本输出的基础知识。要打印 HTML 表格中的数字,您必须将捕获的输出拆分为单独的行(将它们保存到列表或数组中),然后打印您的 HTML 序言(<table> 和 <th>(标题)标签,等等on) ...它们遍历一系列 <tr> 行,将您的数字插入到 <td>>(表格数据)容器中),然后最后打印您的 HTML 结尾(带有结束标签)。
为此,您需要阅读 Perl print 函数以及 Perl 中的“插值”。这是一个相当复杂的话题。
这一切都非常粗糙,并且有一些工具可以让您在更高级别上处理 HTML 的生成。您是否希望将 shell 脚本的执行包装在 Perl 脚本中也是相当可疑的,因为您似乎可以修改 shell 脚本以直接输出 HTML(可能作为由命令行开关或环境变量控制的选项)或你可以用 Perl 重写 shell 脚本。这可能会消除解析输出的额外工作(将其拆分为行并将这些行中的值分离到一个数组中,因为您可以直接将数据捕获到数组中(或者可能打印出您的 HTML 行)。生成它们(但是您现有的 shell 脚本正在这样做)。