在bash中连接字符串会覆盖它们

ske*_*rit 6 bash

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

local records=`echo "${query}" | $MYSQL -u $MyUSER -h $MyHOST -p$MyPASS --table`
Run Code Online (Sandbox Code Playgroud)

查询运行成功,我收到了很好的数据.

然后我迭代这些数据:

for data in $records ;
do
    test+=$data
done
Run Code Online (Sandbox Code Playgroud)

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

所以我只是将它们连接起来.但是当我向bash提供这些数据时:

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

http://www.test.com
Run Code Online (Sandbox Code Playgroud)

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

pass:test.url.com.com
Run Code Online (Sandbox Code Playgroud)

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

小智 21

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

for data in $records ;
do
    data=$(echo "$data" | tr -d '\r')
    test+="$data"
done
Run Code Online (Sandbox Code Playgroud)


fde*_*hin 6

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


小智 2

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

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