mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC1083 (markdown)
28
SC1083.md
Normal file
28
SC1083.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
## This } is literal. Check expression (missing ;/\n?) or quote it.
|
||||||
|
|
||||||
|
### Problematic code:
|
||||||
|
|
||||||
|
rmf() { rm -f "$@" }
|
||||||
|
|
||||||
|
eval echo \${foo}
|
||||||
|
|
||||||
|
### Correct code:
|
||||||
|
|
||||||
|
rmf() { rm -f "$@"; }
|
||||||
|
|
||||||
|
eval "echo \${foo}"
|
||||||
|
### Rationale:
|
||||||
|
|
||||||
|
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, so ShellCheck warns about it.
|
||||||
|
|
||||||
|
In the example function, the `}` is literal because it's 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.
|
||||||
|
|
||||||
|
ShellCheck does not warn about `{}`, since this is frequently used with `find` and rarely indicates a bug.
|
||||||
|
|
||||||
|
### Contraindications
|
||||||
|
|
||||||
|
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}'`.
|
Reference in New Issue
Block a user