**@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).