我的Bash脚本从MySQL生成一个数组:

info_tmp=$(mysql --batch --silent -u root -ppassword database -e "SELECT id,info1,info2 FROM table WHERE id=1")
info=($(for i in $info_tmp;do echo $i;done))
info1=${info[1]}

我的问题是,如果info1是数据库中的空字符串,那么$info1就变成了info2。
如何将空字符串放入$info数组?
Mysql Database:
Id | info1 | info2
 1 |       | data2
 2 | data3 | data4

$info_tmp
1 data2
2 data3 data4

谢谢你的回答
这是最终的代码(@Barmar):
IFS="|"
info_tmp=$(mysql --batch --silent -u root -ppassword database -e "SELECT CONCAT_WS('|', id,info1,info2) FROM table WHERE id=1")
info=(${info_tmp// / })
info1=${info[1]}

最佳答案

如果有一个字符不应该出现在任何列中,请将其用作分隔符。

IFS="|"
info_tmp=$(mysql --batch --silent -u root -ppassword database -e "SELECT CONCAT_WS('|', id,info1,info2) FROM table WHERE id=1")

这是因为bash不合并IFS中的非空白分隔符序列,而只合并空白字符。
我不确定将for复制到$info_tmp$info循环的点是什么,但您需要在那里执行相同的操作。如果使用空格作为单词分隔符,则永远无法从命令替换中获取空数组值。

08-06 21:02