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

时间:2012-09-10 20:18:51

标签: bash

我正在使用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 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

如果您看到行分隔符出现问题,请查看设置IFS variable

这样的东西
IFS="\n"

同样要小心+=因为它可以回退到数组操作,具体取决于BASH的版本。