Created SC3064 (markdown)

Vidar Holen
2025-04-11 15:25:41 -07:00
parent 4e09be15f9
commit 7722268489

32
SC3064.md Normal file

@@ -0,0 +1,32 @@
## In POSIX sh, test -N is undefined.
### Problematic code:
```sh
if [ -N file ]
then
echo "File has been modified since last read"
fi
```
### Correct code:
```sh
if bash -c '[ -N file ]'
then
echo "File has been modified since last read"
fi
```
### Rationale:
`test -N` is not supported by POSIX, and there is no straight forward way of simulating it. If you need this functionality, look into which non-POSIX features your system has to allow this. `stat -c`, `find -printf`, bash, ksh, and Python are all possible options.
Note that `atime` did not turn out to be as useful as first imagined in 1970, and it's generally better not to rely on it.
### Exceptions:
None. If you expect your shell to support `test -N`, either explicitly specify it in the shebang, use a `# shellcheck shell=bash` directive, or ignore this warning.
### Related resources:
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!