Shell

Shell

Made by DeepSource

Assigning to a dynamically created variable SH-1067

Bug risk
Major

var$n=value is not a valid way of assigning to a dynamically created variable name in any shell. Please use one of the other methods to assign to names via expanded strings. Wooledge BashFaq #6 has significantly more information on the subject.

Problematic code:

n=1
var$n="hello"

Preferred code:

  • For integer indexing in ksh/bash, consider using an indexed array:
n=1
var[n]="hello"
echo "${var[n]}"
  • For string indexing in ksh/bash, use an associative array:
typeset -A var
n="greeting"
var[$n]="hello"
echo "${var[$n]}"
  • If you actually need a variable with the constructed name in bash, use declare:
n="Foo"
declare "var$n=42"
echo "$varFoo"
  • For sh, with single line contents, consider read:
n="Foo"
read -r "var$n" << EOF
hello
EOF
echo "$varFoo"

or with careful escaping, use eval:

n=Foo
eval "var$n='hello'"
echo "$varFoo"