[英]special characters in bash script
我有一个bash脚本,其中包含以下行
mysql -uusername -ppassword -e 'UPDATE \'table-name.config\' SET value=1234567890 WHERE action_code=102 AND name=\'last_updated_date\';'
但我明白了
./hybrid_telepath/install: line 856: unexpected EOF while looking for matching `''
./hybrid_telepath/install: line 872: syntax error: unexpected end of file
显然我的角色有问题,并且收线不正确。
知道如何在bash中进行操作吗?
如果我将其更改为
mysql -uusername -ppassword -e "UPDATE `table-name`.`config` SET value=1312626266 WHERE action_code=102 AND name='last_updated_date';"
我懂了
line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET value=1312626266 WHERE action_code=102 AND name=last_updated_date' at line 1
谢谢
转义序列在单引号内不起作用。 将双引号用作最外面的引号,然后就不必在其中转义单引号了:
mysql -uusername -ppassword -e "UPDATE 'table-name.config' SET value=1234567890 WHERE action_code=102 AND name='last_updated_date';"
以前的海报是正确的。 除了建议您使用双引号之外,您可能还希望开始分别构建queryString。 当您在脚本编写方面变得更好时,这种做法将对您有好处(并且希望可以继续使用Python之类的东西)。 在脚本中硬编码数据库凭据也是一种不好的做法。 请注意,您可以在其他地方(即,在另一个脚本中)定义这些值,然后仅提供该脚本的源代码。 这使您的代码模块化。 更好的是,编写函数,源代码和重用。 这是一个例子:
#!/bin/bash
. /etc/myDbCreds
myQuery="select * from foo where bar ='snafu';"
mysql -u $myUser -p${myPass} -e $myQuery
尝试这个:
mysql -uusername -ppassword -e "UPDATE \'table-name.config\' SET value=1234567890 WHERE action_code=102 AND name=\'last_updated_date\';"
我对mysql cmd的-e“”有类似的问题。
这看起来很正常:
$ mysql -h vip0 -u root -pqwerty -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
但是,如果我想通过ssh执行它,它将无法正常工作:
$ ssh g1 -- mysql -hvip0 -uroot -pqwerty -e "show databases;"
ERROR 1049 (42000): Unknown database 'databases'
经过测试,似乎我需要逃脱空间:
$ ssh g1 -- mysql -hvip0 -uroot -pqwerty -e "show\ databases;"
Database
information_schema
mysql
performance_schema
但是我不明白为什么...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.