8

我正在解析来自 mysql 命令的查询结果(使用 --table 参数)

local records=`echo "${query}" | $MYSQL -u $MyUSER -h $MyHOST -p$MyPASS --table`

查询运行成功,我收到了良好的数据。

然后我遍历这些数据:

for data in $records ;
do
    test+=$data
done

代码更广泛,但基本上就是这样。不过,Bash 将每个空格都视为分隔符,这对文本字段来说是个问题。

所以我只是连接它们。但是当我输入 bash 这些数据时:

*URL*
host:
test.url.com
pass:
anothertest

http://www.test.com

它将它连接到类似的东西:

pass:test.url.com.com

好像它不是连接,而是覆盖。这可能是一些回车问题吗?

4

4 回答 4

30

curl从命令中检索到的 stderr 输出也有同样的问题。我发现输出包含需要删除的回车。对于上面的示例,可以使用以下tr工具来完成:

for data in $records ;
do
    data=$(echo "$data" | tr -d '\r')
    test+="$data"
done
于 2015-06-15T07:56:04.727 回答
7

检查您是否使用 Unix 行尾。使用 Windows 行尾对我造成了同样的行为,覆盖了字符串。

于 2015-03-09T16:34:17.987 回答
2

确保您使用的是 Bash 3 或更高版本。Bash 中的+=运算符可用于操作数组。它将使用IFS变量的当前值来拆分标记并将值添加到数组中。

尝试: test="$test $data"连接数据

于 2012-09-10T20:21:51.420 回答
0

如果您发现行分隔符有问题,请查看设置IFS 变量。

就像是

IFS="\n"

还要小心,+=因为它可能会根据 BASH 的版本退回到数组操作。

于 2012-09-10T20:27:04.137 回答