下面的脚本将一堆csv文件加载到mysql数据库中。我试图在循环中执行此函数,但名为return的mysql表字段导致脚本认为它应该执行函数返回。
`around返回是为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
答案 0 :(得分:4)
这是mysql中使用反引号字符的愚蠢引用约定。您可以使用单引号,即'
,即'return'
吗?
反引号表示“在shell中的当前命令中执行命令替换”,因此它正在尝试运行命令return
。
如果你不能使用'return'
那么你可以逃脱所有的反引号,比如
\`return\`
IHTH
答案 1 :(得分:3)
这是因为``包含的字符串是由bash执行的。
试试这个:
echo '` date `' # this output the string ` date `
echo "` date `" # this output current time
但是你不能用单一引号改变双引号,因为你需要$f
用变量来表示。所以用\
来逃避反击。
答案 2 :(得分:2)
简单地逃避反击:
mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (\`return\`,\`id\`,\`field1\`,\`field2\`);";