Created SC3060 (markdown)

Vidar Holen
2020-09-01 17:44:15 -07:00
parent 372c7f2b71
commit c5b6f51b8a

35
SC3060.md Normal file

@@ -0,0 +1,35 @@
## In POSIX sh, string replacement is undefined.
(or "In dash, ... is not supported." when using `dash`)
### Problematic code:
```sh
#!/bin/sh
echo "${var//foo/bar}"
```
### Correct code:
Either switch the shebang to `bash` or `ksh`, or rewrite the expansion using a tool like `sed`:
```sh
#!/bin/sh
echo "$var" | sed 's/foo/bar/g'
```
### Rationale:
String replacement in parameter expansion is a `bash` and `ksh` extension. `dash` and POSIX `sh` does not support it.
### 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!