`{` `/` `}` is a literal hereSH-1083
Curly brackets are normally used in parameter expansion, command grouping and brace expansion syntax.
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.
Problematic code:
rmf() { rm -f "$@" }
# or
eval echo \${foo}
Preferred code:
rmf() { rm -f "$@"; }
# and
eval "echo \${foo}"
In the example function, the }
is literal because it's not at the start of an expression. We fix this by adding a ;
before it.
In the example with eval
, the code works fine. However, we can quiet the warning and follow good practice by adding quotes around the literal data.
The checker does not warn about {}
, since this is frequently used with find
and rarely indicates a bug.
Exception:
This error is harmless when the curly brackets are supposed to be literals as in, for example, awk {'print $1'}
.
However, it's cleaner and less error prone to simply include them inside the quotes: awk '{print $1}'
.