On 22/06/23 11:08 PM, Steffen Nurpmeso wrote: > or even > bash -c 'if [ ! ! hey = hey ]; then echo du; fi' > bash -c 'if [ ! false = 1 ]; then echo du; fi'
`! ! hey = hey' is the same as `! ( ! ( hey = hey ) )', so "not not true => true". It probably works correctly because `! ! hey = hey' are five terms. The bug only occurs for 3 or 4 terms tests: bash-5.1$ test ! ! hey ; printf %s\\n "$?" bash: test: too many arguments 2 bash-5.1$ test ! ! ! hey ; printf %s\\n "$?" bash: test: too many arguments 2 bash-5.1$ test ! ! ! ! hey ; printf %s\\n "$?" 0 bash-5.1$ test ! ! ! ! ! hey ; printf %s\\n "$?" 1 test(1) needs to treat the 0 to 4 arguments expressions specially according to POSIX so the bug is probably only in the code that implements those special cases. -emanuele6