The POSIX spec says, The parameter name or symbol can be enclosed in braces, which are optional except for positional parameters with more than one digit or when parameter is a name and is followed by a character that could be interpreted as part of the name. However, dash seems to diverge from that behavior when we get to $10: $ cat test.sh echo $10 $ dash ./test.sh one two three four five six seven eight nine ten ten $ bash ./test.sh one two three four five six seven eight nine ten one0