This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the bash category.
Last Updated: 2024-11-23
This code, which was supposed to list numbers from "000" to "6001" produced nothing but newlines. Why?
for i in $(seq 0 60); do echo "$i01"; done
# Prints a new line 60 times...
The issue is that in the above code bash sees $i01
and does not know where the
variable name ends and the regular string begins. This confusion happens because
variable names can contain numbers (e.g. jack3=foo
would be valid)
The fix:
# Use the ${<variable>} syntax in the string to demarcate its end
for i in $(seq 0 60); do echo "${i}01"; done
# Or put the numbers outside the quotes of the echo statements
for i in $(seq 0 60); do echo "$i"01; done