【问题标题】:How do I escape the "return" function in a bash script如何在 bash 脚本中转义“返回”函数
【发布时间】:2012-12-21 19:51:53
【问题描述】:

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

【问题讨论】:

    标签: mysql bash shell


    【解决方案1】:

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

    反引号表示“在 shell 中的当前命令中执行命令替换”,因此它正在尝试运行命令 return

    如果您不能使用'return',那么您可以转义所有反引号,例如

    \`return\`
    

    IHTH

    【讨论】:

    • 单引号将列名转换为字符串——不是必需的行为。
    【解决方案2】:

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

    试试这个:

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

    但是你不能用单引号来改变双引号,因为你需要$f 被变量所依赖。所以用\ 逃避反引号。

    【讨论】:

    • 您需要使用双引号来获取分隔标识符,不是吗?它们当然不仅仅是单引号所暗示的字符串值。
    【解决方案3】:

    简单地避开你的反引号:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 2011-04-09
      • 2011-07-10
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2020-02-10
      相关资源
      最近更新 更多