如何在bash脚本中避免“return”函数

5
下面的脚本正在将一堆csv文件加载到mysql数据库中。我试图在循环内执行此函数,但是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
3个回答

4

在mysql中使用反引号字符的引用约定非常麻烦。你可以使用单引号',例如'return'吗?

反引号意味着“在当前shell命令中执行命令替换”,因此它试图运行命令return

如果你不能使用'return',那么你需要转义所有的反引号,例如:

\`return\`

IHTH


2
单引号将列名转换为字符串,这不是所需的行为。 - Jonathan Leffler

3
这是因为被 ` ` 包围的字符串会被bash执行。
尝试这样做:
echo '` date `' # this output the string ` date `
echo "` date `" # this output current time

但是你不能用单引号替换双引号,因为你需要将$f替换为变量。所以要用\转义反引号。


你需要使用双引号来获取定界符标识符,不是吗?它们肯定不仅仅是单引号所暗示的字符串值。 - Jonathan Leffler

2

只需转义反引号:

 mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (\`return\`,\`id\`,\`field1\`,\`field2\`);"; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接