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