Bash循环结合MySQL:如何在查询中使用循环变量
问题解决思路
问题根源是Bash单引号的特性:单引号包裹的内容会被当作纯字符串,变量$i不会被解析替换,导致MySQL收到的查询语句里直接是$i,自然识别无效。
给你两种可行的修改方案:
方案一:改用双引号包裹MySQL查询语句
把查询语句的单引号换成双引号,这样Bash会自动解析里面的$i变量。同时注意给日期值加上单引号,符合MySQL字符串语法:
#!/bin/bash for i in '2022/08/30' '2022/08/31' do mysql --host=myhost --user=myusr --password=mypass -e "select * from db.table where dt = '$i'" done
方案二:拼接单引号与变量
如果坚持用单引号包裹查询主体,可以通过字符串拼接的方式,把变量$i用单引号包裹后插入到查询语句中:
#!/bin/bash for i in '2022/08/30' '2022/08/31' do mysql --host=myhost --user=myusr --password=mypass -e 'select * from db.table where dt = '"'$i'"'' done
这里的拼接逻辑是:'select ... = ' + '$i' + '',最终组合成符合MySQL要求的查询语句。
额外提示
如果后续变量来源是不可信输入(比如用户输入),直接拼接SQL会有注入风险,这种场景建议使用MySQL的参数化查询方式,但你当前用固定日期列表,完全不用担心这个问题。
内容的提问来源于stack exchange,提问作者kikee1222
相关产品推荐
相关产品推荐

