mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 11:19:45 +08:00
Created SC2204 (markdown)
32
SC2204.md
Normal file
32
SC2204.md
Normal file
@@ -0,0 +1,32 @@
|
||||
## (..) is a subshell. Did you mean [ .. ], a test expression?
|
||||
|
||||
### Problematic code:
|
||||
|
||||
```sh
|
||||
if ( -d mydir )
|
||||
then
|
||||
echo "It's a directory"
|
||||
fi
|
||||
```
|
||||
|
||||
### Correct code:
|
||||
|
||||
```sh
|
||||
if [ -d mydir ]
|
||||
then
|
||||
echo "It's a directory"
|
||||
fi
|
||||
```
|
||||
### Rationale:
|
||||
|
||||
Tests like `-d` to see if something is a directory or `-z` to see if it's non-empty are actually flags to the `test` command, and only work as tests in that context. `[` is an alias for `test`, so you'll frequently see them written as `[ -d mydir ]`.
|
||||
|
||||
`( .. )` is completely unrelated, and is a subshell mostly used to scope shell modifications. They should not be used in `if` or `while` statements in shell scripts.
|
||||
|
||||
If you wanted to test a condition, rewrite the `( .. )` to `[ .. ]`.
|
||||
|
||||
### Exceptions:
|
||||
|
||||
None.
|
||||
|
||||
This error is triggered by having a unary test operator as the first command name in a subshell, which won't normally happen. Note that there's a similar warning [[SC2205]] with a higher false positive rate.
|
Reference in New Issue
Block a user