2015-04-19 95 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