Created SC3002 (markdown)

Vidar Holen
2020-09-01 17:16:01 -07:00
parent 077389777e
commit cb98ea8fed

41
SC3002.md Normal file

@@ -0,0 +1,41 @@
## In POSIX sh, extglob is undefined.
(or "In dash, ... is not supported." when using `dash`)
### Problematic code:
```sh
#!/bin/sh
rm !(*.hs)
```
### Correct code:
Either switch the shebang to a shell that does support extglob, like `bash` or `ksh`, or rewrite in terms of a loop with a `case` or `grep` match:
```sh
#!/bin/sh
for file in *
do
case "$file" in
*.hs) true;;
*) rm "$file" ;;
esac
done
```
### Rationale:
Extglobs are extensions in bash and ksh, while your shebang says you're using `sh` or `dash`.
### Exceptions:
If you only intend to target shells that supports this feature, you can change
the shebang to a shell that guarantees support, or [[ignore]] this warning.
You can use `# shellcheck disable=SC3000-SC4000` to ignore all such compatibility
warnings.
### Related resources:
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!