mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC2036 (markdown)
23
SC2036.md
Normal file
23
SC2036.md
Normal file
@@ -0,0 +1,23 @@
|
||||
## If you wanted to assign the output of the pipeline, use a=$(b | c) .
|
||||
|
||||
### Problematic code:
|
||||
|
||||
sum=find | wc -l
|
||||
|
||||
### Correct code:
|
||||
|
||||
sum=$(find | wc -l)
|
||||
|
||||
### Rationale:
|
||||
|
||||
The intention in this code was that `sum` would in some way get the value of the command `find | wc -l`.
|
||||
|
||||
However, `|` has precedence over the `=`, so the command is a two stage pipeline consisting of `sum=find` and `wc -l`.
|
||||
|
||||
`sum=find` is a plain string assignment. Since it happens by itself in an independent pipeline stage, it has no effect: it produces no output, and the variable disappears when the pipeline stage finishes. Because the assignment produces no output, `wc -l` will count 0 lines.
|
||||
|
||||
To instead actually assign a variable with the output of a command, command substitution `$(..)` can be used.
|
||||
|
||||
### Exceptions:
|
||||
|
||||
None. This warning is triggered whenever the first stage of a pipeline is a single assignment, which is never correct.
|
Reference in New Issue
Block a user