Bash循环读取MySQL多列值报错:read标识符无效
问题解决:Bash脚本读取MySQL多列数据报错
错误根源
你遇到的read: 'IP, PL_Seq': not a valid identifier错误,核心原因是**read命令的变量之间不能用逗号分隔**——Bash会把IP,识别成一个变量名,而变量名不允许包含逗号,因此触发了无效标识符的报错。
修正后的脚本
把read IP, PL_Seq改成read IP PL_Seq(用空格分隔变量名),同时修正表名拼写错误(mytabel改为mytable),调整后的脚本如下:
sql="SELECT IP,PL_Seq FROM mytable WHERE FLAG=0 AND CIDR =24" i=0 while IFS=$'\t' read IP PL_Seq ;do IP[$i]=$IP PL_Seq[$i]=$PL_Seq ((i++)) echo "$IP" echo "$PL_Seq" done < <(mysql TestDB -u "$DB_USER" --password="$DB_PASSWD" -N -e "$sql")
额外优化建议
- 如果仅需循环处理每行数据,不需要存储到数组,可简化脚本:
sql="SELECT IP,PL_Seq FROM mytable WHERE FLAG=0 AND CIDR =24" while IFS=$'\t' read IP PL_Seq ;do echo "IP: $IP, PL_Seq: $PL_Seq" done < <(mysql TestDB -u "$DB_USER" --password="$DB_PASSWD" -N -e "$sql")
- 给变量包裹双引号(如
"$DB_USER"),可避免变量值含空格或特殊字符时出现异常。
内容的提问来源于stack exchange,提问作者Poori
相关产品推荐
相关产品推荐

