While debugging a script, I finally found the cause, but I don't understand the why.
with an example tab delimited text file containing:
$ cat list1.txt
123 Fake St Miami FL
456 None Rd San Francisco CA
789 Nowhere Dr Denver CO
initially created with vi, file identifies it as
$ file list1.txt
list1.txt: ASCII text
Running this one liner (edit: changed post to multiline for readability) to read each line into 3 variables, the printed order is as specified in the script. Note that the concatenation of strings is this convoluted as I was trying to be very explicit about the order when debugging:
$ while IFS=" " read -r addr1 city state
do
data0="'"
data1='companyName=&'
data2="address1=$addr1"
data3='&city='
data4="$city"
data5='&state='
data6="$state"
data7='&urbanCode=&zip='
data8="'"
data=${data0}${data1}${data2}${data3}${data4}${data5}${data6}${data7}${data8}
echo "$data"
done < list1.txt
'companyName=&address1=123&city=Fake&state=St Miami FL&urbanCode=&zip='
'companyName=&address1=456&city=None&state=Rd San Francisco CA&urbanCode=&zip='
'companyName=&address1=789&city=Nowhere&state=Dr Denver CO&urbanCode=&zip='
Changing file list1.txt DOS format results in reordered output
$ unix2dos list1.txt
unix2dos: converting file list1.txt to DOS format...
$ file list1.txt
list1.txt: ASCII text, with CRLF line terminators
$ while IFS=" " read -r addr1 city state; do data0="'"; data1='companyName=&'; data2="address1=$addr1"; data3='&city='; data4="$city"; data5='&state='; data6="$state"; data7='&urbanCode=&zip='; data8="'"; data=${data0}${data1}${data2}${data3}${data4}${data5}${data6}${data7}${data8}; echo "$data"; done < list1.txt
&urbanCode=&zip='ress1=123&city=Fake&state=St Miami FL
&urbanCode=&zip='ress1=456&city=None&state=Rd San Francisco CA
&urbanCode=&zip='ress1=789&city=Nowhere&state=Dr Denver CO
Why is this happening? GNU bash, version 3.2.57