You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本输出HTML文件?Bash脚本变量未解析问题求助

问题分析与解决方法

你碰到的核心问题是Here Document( heredoc)的引号使用方式——当你用'EOF'作为分界符时,Bash会将整个 heredoc 内容当作纯文本,完全不会解析其中的变量、命令替换或者转义字符,所以${ec_1}和${ec_2}会原封不动地写入HTML文件。

另外你的脚本里还有两个小问题需要修正:

  • ec_2变量没有正确初始化,当前写法是直接把命令输出重定向到$ec_2,但此时变量未定义,会导致错误
  • if条件里的命令可以优化,避免不必要的管道操作

修改后的完整脚本

#!/bin/bash
cat << EOF > 01.html
<html>
<head>
<title>HTML Convert</title>
</head>
<body>
EOF

ec_1="====Default ID===="
# 用egrep -c直接统计匹配行数,替代cat+egrep+wc的组合
if [ $(egrep -c "lp:|uucp:|nuccp:" /etc/passwd) -eq 0 ]; then
    # 用命令替换$(...)把命令结果赋值给ec_2
    ec_2=$(egrep "lp:|uucp:|nuccp:" /etc/passwd)
else
    # 可以给ec_2设置一个默认值,避免没有匹配时变量为空
    ec_2="No matching users found"
fi

cat << EOF >> 01.html
<h1>${ec_1}</h1>
<h5>${ec_2}</h5>
</body>
</html>
EOF

关键修改说明

  1. 去掉heredoc分界符的单引号:把'EOF'改成EOF,这样Bash会解析 heredoc 内部的变量和命令替换,${ec_1}和${ec_2}就会被替换成实际的变量值。
  2. 修正ec_2的赋值方式:使用$(command)的命令替换语法,把egrep的输出结果直接赋值给ec_2,而不是用重定向。
  3. 优化条件判断命令:用egrep -c直接统计匹配的行数,省去了cat和wc命令,让代码更简洁高效。
  4. 添加else分支:避免当有匹配结果时ec_2未赋值,确保HTML里不会出现空的<h5>标签。

这样修改后,生成的01.html就会正确显示变量的内容,而不是原始的变量名了。

内容的提问来源于stack exchange,提问作者leej0978

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:32:12