2012-09-10 36 views
1

我解析從mysql命令查詢結果(與--table參數)在bash連接字符串覆蓋它們

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 

,彷彿這是不串聯,而是覆蓋。 這可能是一些回車問題?

+1

這聽起來像你可能會得到嵌入在字符串中莫名其妙回車,但我不能告訴你從什麼張貼在那裏。嘗試用例如打印您的各種字符串'printf'test =%q \ n「」$ test「' - bash的%q格式將打印一個帶引號的格式字符串,這樣可以更容易地辨別回車等事情。嘗試每次循環打印'「$ data」',然後在最後打印'「$ test」'並看看它們的外觀。 –

回答

2

確保您使用的是Bash 3或更高版本。 Bash中的+=運算符可用於操作Array。它將使用IFS變量的當前值拆分令牌並將該值添加到數組中。

嘗試: test="$test $data"連接的數據

0

看一看設置IFS variable如果你看到有行分隔符的問題。

喜歡的東西

IFS="\n" 

而且要小心+=,因爲它可以回落到數組操作取決於BASH的版本。

2

檢查您是否使用Unix行尾。使用Windows行結尾對我造成了同樣的行爲,覆蓋字符串。

11

我與從curl命令檢索到的stderr輸出有相同的問題。我發現輸出包含需要刪除的回車符。對於以上示例可以使用tr工具來完成:

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