I'm parsing query results from a mysql command (with the --table parameter)
local records=`echo "${query}" | $MYSQL -u $MyUSER -h $MyHOST -p$MyPASS --table`
The query is run successfully, and I receive good data.
Then I iterate over this data:
for data in $records ;
do
test+=$data
done
The code is more extensive, but this is basically it. Bash sees every space as a separator though, and that's a problem for text fields.
So I just concatenate them. But when I feed bash this data:
*URL*
host:
test.url.com
pass:
anothertest
http://www.test.com
It concatenates it to something like:
pass:test.url.com.com
As if it's not concatenating, but overwriting. Is this maybe some carriage return problem?
I had the same issue with the stderr output retrieved from the curl
command. I found that the output contains carriage return that needs to be removed. For the example above this could be done using the tr
tool:
for data in $records ;
do
data=$(echo "$data" | tr -d '\r')
test+="$data"
done
Check that you use Unix line endings. Using Windows line endings caused the same behavior for me, overwriting strings.
Make sure you're using Bash 3 or later. The +=
operator in Bash can be used to manipulate an Array. It will use the current value of the IFS
variable to split the tokens and add the value to the array.
Try:
test="$test $data"
to concatenate the data
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With