mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC3064 (markdown)
32
SC3064.md
Normal file
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!
|
Reference in New Issue
Block a user