代码之家  ›  专栏  ›  技术社区  ›  Zak

MySQL bash语句中的特殊字符导致失败

  •  2
  • Zak  · 技术社区  · 3 年前

    bash ^ $ % 等等。。

    使用以下命令失败:

    create_database=$(mysql --login-path=local -se "CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY '1234!!ABC^@DEFGH';")
    

    鉴于以下情况:

    create_database=$(mysql --login-path=local -se "CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY '1234';")
    

    猛击 脚本不喜欢密码,还是MySQL不喜欢密码?附近有工作吗?我想在bash中实现这一点,而不是像PHP/PERL这样的脚本语言

    1 回复  |  直到 3 年前
        1
  •  1
  •   Bill Karwin    3 年前

    这是一个空壳问题。在您显示的示例中,字符 !! 在发送到mysql客户端之前,正在通过shell历史扩展进行处理。因此,您正在设置密码:

    1234cd srcABC^@DEFGH
    

    假设 cd src 是您在此之前运行的命令。 !! 替换为shell历史记录中的上一个命令。

    你可以阅读 man bash

    执行的扩展有七种:大括号扩展、平铺扩展、参数和变量扩展、命令替换、算术扩展、分词和路径名扩展。

    展开顺序为:大括号展开、平铺展开、参数展开、变量和算术展开以及命令替换(以从左到右的方式完成)、分词和路径名展开。