SC1098
Joachim Ansorg edited this page Nov 12, 2021
·
4 revisions
Quote/escape special characters when using eval, e.g. eval "a=(b)".
Problematic code:
eval $var=(a b)Correct code:
eval "$var=(a b)"Rationale:
Shells differ widely in how they handle unescaped parentheses in eval expressions.
-
eval foo=baris allowed by dash, bash and ksh. -
eval foo=(bar)is allowed by bash and ksh, but not dash. -
eval $var=(bar)is allowed by ksh, but not bash or dash. -
eval foo() ( echo bar; )is not allowed by any shell.
Since the expression is evaluated as shell script code anyways, it should be passed in as a literal string without relying on special case parsing rules in the target shell. Quote/escape the characters accordingly.
Exceptions:
None.