Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Shell-使用包含双引号的字符串变量_Mysql_Shell - Fatal编程技术网

Mysql Shell-使用包含双引号的字符串变量

Mysql Shell-使用包含双引号的字符串变量,mysql,shell,Mysql,Shell,我有一个shell脚本,它从文件中获取行,并通过mysql将它们发送到数据库。但是,它正在读取的某些行包含双引号 示例-这是一个“文件中的行”,带有单词 这一行最后被放入一个变量中,输入mysql命令将其发送到数据库。这就是问题所在。变量中的引号导致mysql命令出错 例如: MySQLString='INSERT INTO MyTable (`id`, `line`,) VALUES (NULL, "'"$LifeFromFile"'")' mysql -uName -pPass --exec

我有一个shell脚本,它从文件中获取行,并通过mysql将它们发送到数据库。但是,它正在读取的某些行包含双引号

示例-
这是一个“文件中的行”,带有单词

这一行最后被放入一个变量中,输入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')