CGI脚本中变量的变量

时间:2015-04-19 09:07:39

标签: linux bash postgresql shell cgi

有这样一个剧本:

NAME = `echo "$QUERY_STRING" | sed -n 's/^.*post=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
RES = `psql -U user -d db -t -c "SELECT tabl FROM tablica WHERE name = '$NAME'"`
echo $RES

一切正常(这意味着GET请求很好)。但是数据库中的数据不会出现。

问题是查询WHERE NAME中的参数值未设置,我收到语法错误。

我在互联网上看过很多文章,但没有发现反对内部的变量。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

不允许在变量赋值中在等号周围放置空格。你通常不应该使用反引号,但更喜欢$()形式,更容易处理引用。

NAME=$(echo "$QUERY_STRING" | sed -n 's/^.*post=\([^&]*\).*$/\1/p' | sed "s/%20/ /g")
RES=$(psql -U user -d db -t -c "SELECT tabl FROM tablica WHERE name = '$NAME'")
echo "$RES"

请注意,您正在做的事情非常不安全,您需要对输入进行更强有力的验证。