diff --git a/SC3067.md b/SC3067.md new file mode 100644 index 0000000..b8da601 --- /dev/null +++ b/SC3067.md @@ -0,0 +1,33 @@ +## In POSIX sh, test -O is undefined. + +### Problematic code: + +```sh +if [ -O file ] +then + echo "File is owned by you" +fi +``` + +### Correct code: + +```sh +if [ -n "$(find file -prune -user "$(id -u)")" ] +then + echo "File is owned by you" +fi +``` + +### Rationale: + +`test -O` is a bash/ksh/dash/ash extension to check whether the file is owned by you. + +To ensure compatibility with other shells, you can use `find -user "$(id -u)"`. + +### Exceptions: + +If you expect your shell to support `test -O`, specify this explicitly in the shebang (or with `# shellcheck shell=dash` directive). + +### Related resources: + +* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc! \ No newline at end of file