mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 11:19:45 +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