2015-04-19 73 views
1

有这样一个脚本:变量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中的参数值,并且出现语法错误。

我已经在互联网上阅读了很多文章,但没有发现任何关于反引号内部的变量。

我该如何解决这个问题?

+0

shell不会在'$ singlequotes'内部展开美元变量。解决这个问题的最好方法是使用here-document(它在$内部双引号和单引号内展开) – wildplasser

+0

该代码在bash中不可能“正常工作”。请复制并粘贴您的真实代码 –

回答

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" 

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

+0

仍然不起作用。 –

+1

你需要比“不工作”更精确。请在您的问题中提供确切的错误,确切的输入和您当前的代码。 – Mat