Docker

Docker

Made by DeepSource

Bad use of {} DOK-SC1083

Anti-pattern
Minor

Bad Practice

rmf() { rm -f "$@" }

or

eval echo \${foo}

Recommended

rmf() { rm -f "$@"; }

and

eval "echo \${foo}"

Curly brackets are normally used as syntax in parameter expansion, command grouping and brace expansion. However, if they don't appear alone at the start of an expression or as part of a parameter or brace expansion, the shell silently treats them as literals. This frequently indicates a bug.

In the example function, the } is literal because it is not at the start of an expression. We fix it by adding a ; before it.

In the example eval, the code works fine. However, we can quiet the warning and follow good practice by adding quotes around the literal data.

There would be no warning about {}, since this is frequently used with find and rarely indicates a bug.

Exceptions:

This error is harmless when the curly brackets are supposed to be literal, in e.g. awk {'print $1'}. However, it's cleaner and less error prone to simply include them inside the quotes: awk '{print $1}'.