如何在Shell脚本中遍历SQL查询结果?
解决方法
方法1:直接遍历命令输出(适用于表名无特殊字符)
直接在for循环中执行查询命令,无需先存入变量:
for table in $(SELECT tablename from List); do # 这里写你的处理逻辑,比如打印表名 echo "正在处理表: $table" done
方法2:按行读取(更可靠,支持含特殊字符的表名)
用while read循环逐行读取查询结果,这是最稳妥的方式,避免表名包含空格、制表符时出现异常:
SELECT tablename from List | while read -r table; do echo "正在处理表: $table" done
如果必须先将结果存入变量,也可以用Here String传递给while read:
tablelist=$(SELECT tablename from List) while read -r table; do echo "正在处理表: $table" done <<< "$tablelist"
问题原因
你之前的循环把整个列表当成单个元素,大概率是因为循环时给变量加了双引号(比如for table in "$tablelist"),双引号会把变量内容作为一个整体处理。即使不加引号,若表名包含特殊字符,for循环会按默认的IFS(空格、制表符、换行)分割,也可能出错。而while read是逐行读取,能完美避免这些问题。
内容的提问来源于stack exchange,提问作者Aditya Sethi
相关产品推荐
相关产品推荐

