A couple changes and it should work:
Generally, when you use a variable like you did in the echo, the original variable remains as it was, so your use of string 2 is totally unnecessary. Also, I am in the habit of using curly braces to {enclose} variables so they can be referenced right inside text, the curly braces work to delimit the variable name, just put the dollar sign in front (example to follow).
1- When you first set string1, do not put spaces on either side of the equal sign.
2- when assigning the results of a command to a variable, you have to force the command to be executed, single back ticks (the character to the left of the #1 key on US keyboards) surrounding the command do this.
3- watch for the number of characters you cut, your code and example do not agree.
So that line should look like:
string1=`echo $pos | cut -c 20-38`
The other thing is when you set one value from another do not include the extra equal sign. So the code to set string2 should look like:
string2="$pos"
I believe the following will do as you request, I adjusted the character counts to give the output of your example:
The input "file" for my test contained:
abcdefghi1234567890QWERTYUXY.tar.gz
And my script is:
#!/bin/sh
while read pos; do
string1=`echo ${pos} | cut -c 10-28`
echo "${string1} ${pos}"
done < file
The output looks like:
1234567890QWERTYUXY abcdefghi1234567890QWERTYUXY.tar.gz
Which is exactly what I believe you are asking for.