1

次のスクリプトがあります。

#!/bin/sh    
Q=`</dev/urandom tr -dc A-Za-z0-9 | head -c30`
mysql -uusername -ppasword accounts -e "update forum set key='$Q' where id='1';"

"forum"、"key"、"id" にバックティック (``) を追加する必要があります。そうしないと、エラーが返されます。

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key='xdindSG7hK9KaYgs9RISJNqrzmn4LJ' where id='1'' at line 1

しかし、バックティックを追加すると、bash はそれらを変数として解釈します。

私は何をすべきか?

4

2 に答える 2

2

HERE ドキュメントを試してください:

#!/bin/sh    
Q=`</dev/urandom tr -dc A-Za-z0-9 | head -c30`
mysql -uusername -ppasword accounts <<HERE
    update forum set key='$Q' where id='1';
HERE

試してみてください

cat <<HERE
    update forum set key='$Q' where id='1';
HERE

出力:

フォーラム セット キー='fnPIOid15anEJ2a3zVL6I1wbRjAKk0' を更新します。

于 2011-09-27T22:46:29.247 に答える
1

一重引用符と二重引用符を切り替えます。一重引用符は、内容を無視するように bash に指示し、バックティックを追加できるようにします。

于 2011-09-27T22:33:42.457 に答える