Created SC3013 (markdown)

Vidar Holen
2020-09-01 17:10:24 -07:00
parent af648d27f1
commit 5ff1308b01

49
SC3013.md Normal file

@@ -0,0 +1,49 @@
## In POSIX sh, `-nt` is undefined.
### Problematic code:
```sh
#!/bin/sh
if [ Foo.java -nt Foo.class ]
then
javac Foo.java
fi
```
### Correct code:
The easiest fix is to switch to a shell that *does* support `-nt`, like bash:
```sh
#!/bin/bash
if [ Foo.java -nt Foo.class ]
then
javac Foo.java
fi
```
Otherwise, `find` can be used:
```sh
#!/bin/sh
if [ -n "$(find Foo.java -newer Foo.class)" ]
then
javac Foo.java
fi
```
### Rationale:
`test -nt` is an extension in ksh, bash and dash, but it is not covered by POSIX.
### 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!