Mysql Shell-使用包含双引号的字符串变量
我有一个shell脚本,它从文件中获取行,并通过mysql将它们发送到数据库。但是,它正在读取的某些行包含双引号 示例-Mysql Shell-使用包含双引号的字符串变量,mysql,shell,Mysql,Shell,我有一个shell脚本,它从文件中获取行,并通过mysql将它们发送到数据库。但是,它正在读取的某些行包含双引号 示例-这是一个“文件中的行”,带有单词 这一行最后被放入一个变量中,输入mysql命令将其发送到数据库。这就是问题所在。变量中的引号导致mysql命令出错 例如: MySQLString='INSERT INTO MyTable (`id`, `line`,) VALUES (NULL, "'"$LifeFromFile"'")' mysql -uName -pPass --exec
这是一个“文件中的行”,带有单词
这一行最后被放入一个变量中,输入mysql命令将其发送到数据库。这就是问题所在。变量中的引号导致mysql命令出错
例如:
MySQLString='INSERT INTO MyTable (`id`, `line`,) VALUES (NULL, "'"$LifeFromFile"'")'
mysql -uName -pPass --execute "$MySQLString"
您可能需要在此处使用
printf
:
line='This is a "line from a file" with words'
printf -v sqlStr "INSERT INTO MyTable (id, line) VALUES (NULL, '%s')" "$line"
echo "$sqlStr"
老实说,在这种情况下,我使用Perl而不是shell;使用shell脚本调用Perl脚本,但是让Perl读入文件的内容并进行MySQL调用,这样就可以使用参数绑定,避免引用转义。如果输入了多个变量,printf行将如何更改?这仍然会导致MySQL调用出错。它的回声很好,就像以前一样。解析引号的实际sql命令引发sql语法错误。我尝试在%s附近使用“,”和“插入到MyTable(id,line)值(NULL,“%s”)“$line”中。可能
printf-v sqlStr”插入到MyTable(id,line)值(NULL,“%s”)“$line”
中,效果很好!感谢Walter A!当编辑答案以匹配解决方案时,我会将其标记为正确!
INSERT INTO MyTable (`id`, `line`) VALUES (NULL, 'This is a "line from a file" with words')