如何在bash脚本中转义“return”函数

时间:2012-12-21 19:51:54

标签: mysql bash shell

下面的脚本将一堆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

3 个答案:

答案 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\`);";