反引号无法在shell脚本中运行mysql查询

时间:2016-09-08 11:02:02

标签: mysql linux shell sh

您好我正在尝试从shell脚本运行MySQL查询。

mysql -u root -p'1234' -e "CREATE TABLE $DB.aa_vv_cc
(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
city varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
lat varchar(255) DEFAULT NULL,
`long` varchar(255) DEFAULT NULL,
 status int(11) NOT NULL DEFAULT '1',
 created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 updated_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY ('id')
);"

我收到错误" long"。后退标记不适用于shell脚本。非常感谢。

2 个答案:

答案 0 :(得分:1)

shell中的反引号为Command Substitution

它们用双引号字符串进行评估。

所以shell正在看

`long`

在您的字符串中并尝试运行命令long,并且可能会失败。

你需要逃避反引号

\`long\`

在双引号字符串中以防止(或使用单引号字符串,不会评估它们)

'... `long` ...'

答案 1 :(得分:0)

你必须在这里尝试这个我修改了两个'long'替换为\'long\'PRIMARY KEY ('id')替换为PRIMARY KEY (id)此查询在我的shell脚本中有效。这是testdatabase的名称。

mysql -u root  -p'1234' -e "USE test;CREATE TABLE $DB.aa_vv_cc (id int(10) unsigned NOT NULL AUTO_INCREMENT,city varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,lat varchar(255) DEFAULT NULL,\`long\`varchar(255) DEFAULT NULL, status int(11) NOT NULL DEFAULT '1', created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamp NOT NULL DEFAULT '0000-00-0000:00:00',PRIMARY KEY (id));"