As you've discovered, a for
loop takes the values following "in" as literal strings, broken up into words according to your IFS settings (default space/tab/newline). You have to use some kind of substitution to generate a list of values that go there if you want to use it.
for f in $(<value.txt) ; do
But when taking the values from a text file, a while+read
loop is usually better, because read takes in a line at a time, and word-breaking isn't performed. You also don't need to use command substitution, as simple file redirection will work.
while read f ; do
PS: Please use [code][/code]
tags around your code, to preserve formatting and to improve readability.