Skip to content

Files

Latest commit

 

History

History
40 lines (25 loc) · 1.11 KB

SC1037.md

File metadata and controls

40 lines (25 loc) · 1.11 KB

Pattern: Missing braces for positional over 9

Issue: -

Description

For legacy reasons, $10 is interpreted as the variable $1 followed by the literal string 0.

Curly braces are needed to tell the shell that both digits are part of the parameter expansion.

Please note that accessing any positional parameters beyond $9 using ${num} is non-POSIX.

Example of incorrect code:

echo "Ninth parameter: $9"
echo "Tenth parameter: $10"

Example of correct code:

echo "Ninth parameter: $9"
echo "Tenth parameter: ${10}"

Exceptions

If you wanted the trailing digits to be literal, ${1}0 will make this clear to both humans and shellcheck.

In dash, $10 is (wrongly) interpreted as ${10}, so some 'reversed' care should also be taken:

bash -c 'set a b c d e f g h i j; echo $10 ${1}0' # POSIX: a0 a0
dash -c 'set a b c d e f g h i j; echo $10 ${1}0' # WRONG: j a0

Further Reading