3

sqliteデータベースに値を挿入するbashスクリプトを作成しました。コマンドは次のとおりです

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('$f1','$f2');"

このコマンドf1は、変数に一重引用符が含まれるまで正常に機能します

# e.g f1="I'm just kidding"
# the command reported error
Error: near "m": syntax error

誰かが変数内の一重引用符をエスケープする方法を教えてもらえますか?任意の推奨事項をいただければ幸いです。ありがとう!

4

3 に答える 3

4

bashから、$ {varname // x / y}を使用して、varname変数でxのすべてのインスタンスをyに置き換えることができます。

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('${f1//\'/\'}','${f2//\'/\'}');"

@ignacioVazquez-php perl pythonにはすべて入力のサニタイズに役立つモジュールがあるため、Abramsが最良の答えです。

于 2013-01-15T14:19:40.813 に答える
4

SQLの一重引用符をエスケープするには、それを2倍にします(https://www.sqlite.org/faq.html#q14):

$ f1="I'm just kidding"
$ echo "${f1//\'/''}"
I''m just kidding
$ f2="no single quotes"
$ echo "${f2//\'/''}"
no single quotes

それで

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('${f1//\'/''}','${f2//\'/''}');"
于 2013-01-15T15:26:31.833 に答える
0

あなたは\を使うことができます

f1="I\'m just kidding"
于 2013-01-15T14:11:58.310 に答える