直接运行/通过bash

时间:2016-09-25 21:45:22

标签: mysql bash

我运行代码

user@host:~$ mysql -h mysql-server -uuser -ppassword scans -N -B -e 
'SELECT scan_id, count(*) FROM scan_info NATURAL JOIN found_results  
WHERE fp_id = "1669" AND timestamp >= "2016-08-31"  
ORDER BY scan_id  LIMIT 1'

结果是

52169471    9

然而,当我通过bash -c运行时,我得到了

user@host:~$ bash -c "mysql -h mysql-server -uuser -ppassword scans -N -B -e
'SELECT scan_id, count(*)  FROM scan_info  NATURAL JOIN found_results  
WHERE fp_id = "1669" AND timestamp >= "2016-08-31"  
ORDER BY scan_id  LIMIT 1'"

我得到了不同的结果:

51278887    23

任何想法为什么?

1 个答案:

答案 0 :(得分:1)

如果以上命令有三个引用级别。这将导致内部双引号出现问题。这是bash实际执行的命令:

result = left_outer_joins(:caracteristiquetests, :situations).where('nomdep LIKE ? OR name LIKE ? OR nomregion LIKE ?', "%#{query}%", "%#{query}%", "%#{query}%")
result = result.where('handicap LIKE ?', "%#{handicap}%") if handicap
result = result.where('animaux LIKE ?', "%#{animaux}%") if animaux
result = result.where('television LIKE ?', "%#{television}%") if television
result = result.where('plage LIKE ?', "%#{plage}%") if plage
result = result.where('etang LIKE ?', "%#{etang}%") if etange
result = result.where('lac LIKE ?', "%#{lac}%") if lac
return result

正如您所看到的,内部双引号已经消失。您可以通过转义内部双引号来解决这个问题:

mysql -h mysql-server -uuser -ppassword scans -N -B -e 'SELECT scan_id, count(*)  FROM scan_info  NATURAL JOIN found_results  WHERE fp_id = 1669 AND timestamp >= 2016-08-31  ORDER BY scan_id  LIMIT 1'