CGI 脚本中变量替换不起作用

CGI 脚本中变量替换不起作用

我正在尝试编写一个 CGI 脚本,该脚本从表单中获取姓名和电子邮件,将 QUERY_STRING 变量解码为两个值,然后对它们进行处理(现在我只是解码了姓名,并试图将其输出到浏览器中以查看它是否有效)。代码是用 bash 编写的,如下所示:

echo "Content-type: text/html"
echo ""
name=`echo "$QUERY_STRING" | awk '{split($0,array,"&")} END{print array[1]}' | awk '{split($0,array,"=")} END{print array[2]}'`
cat <<EOT
<!DOCTYPE html>
<html>
<head>
        <title>Welcome to our application</title>
</head>
<body>
        <p>Welcome $name </p>
</body>
</html>
EOT

问题是,每当我通过表单输入信息后运行代码时,它不是在网络浏览器中打印(例如)“Welcome Jon”,而是打印“Welcome $name”,基本上没有像它应该的那样进行替换。

我尝试过的事情:

  1. 我也尝试在 html 之外回显 name 变量,但是没有得到任何结果,因此 awk 语句可能有问题,但我无论如何也想不出它是什么。
  2. 尝试删除第二个 awk 并最终得到预期结果,因为浏览器在回显中打印了 name=Jon,但对于 html 部分,它仍然打印“Welcome $name”。

可能有用的信息:

-我有 debian 12 发行版并且已经为 apache 设置了 cgid 模块。

-在表单中我指定了姓名和电子邮件的获取方法,当我尝试按原样打印 QUERY_STRING 变量时,它起作用了。

我对 Linux 和 CGI​​ 脚本都还只是个初学者,因此我非常欢迎任何建议。提前谢谢您!

答案1

切线地说,bash 可以解析查询字符串:

declare -A data
while IFS='=' read -r -d '&' key value; do
  data["$key"]=$value
done <<<"${QUERY_STRING}&"

然后,您就可以${data[name]}在 heredoc 中使用。

相关内容