**@Chris Page** offered a perfectly acceptable answer, because it addresses all of your necessary issues, but then I took a second look at your code and wondered why not use a function with a loop instead of all those variable commands? ink() { square_dimension="$2" infile="$1" /Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png "${root}/test_${square_dimension}.png" -w ${square_dimension} -h ${square_dimension} "$infile" } for i in {256,128,64,48,40,32,24,16}; do ink "$1" "$i"; done **Note that the above code has not been tested. I will update after I have had a chance to test it, but it looks good to me. You may need to export the function or something (`export -f ink`) or mess around with the argument variables -- but like I said, I will post an update after I've had a chance to test it, but like I said before, *@Chris Page* offered an answer that pretty much answers your question. This is simply additional info that is better formatted as a question rather than multiple comments.** Also, it's best practices to always use lowercase variable names in shell scripts so as not to overwrite any of the built-in environment variables (which is something that I have struggled with, because the variables are so much easier to recognize -- especially in a large script on a system without a colored terminal for syntax highlighting).