5

下面的脚本将一堆 csv 文件加载到 mysql 数据库中。我试图在循环中执行这个函数,但是名为 return 的 mysql 表字段导致脚本认为它应该执行函数 return。

return 周围的 ` 是为 mysql 转义它,它是一个 mysql 关键字。

for f in *.txt; 
do 
 mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (`return`,`id`,`field1`,`field2`);"; 
done
4

3 回答 3

4

这是mysql中使用反引号字符的愚蠢引用约定。你可以使用单引号代替,即',即'return'

反引号的意思是“在 shell 的当前命令中执行命令替换”,所以它正在尝试运行命令return

如果你不能使用'return',那么你可以逃避所有的反引号,比如

\`return\`

IHTH

于 2012-12-21T20:05:10.343 回答
3

发生这种情况是因为由 ` 包围的字符串是由 bash 执行的。

试试这个:

echo '` date `' # this output the string ` date `
echo "` date `" # this output current time

但是你不能用一个单引号来改变双引号,因为你需要$f被变量所束缚。所以用\.

于 2012-12-21T20:04:26.033 回答
2

简单地避开你的反引号:

 mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (\`return\`,\`id\`,\`field1\`,\`field2\`);"; 
于 2012-12-21T20:05:49.563 回答