<div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>POSIX specifies that it *should* be inconsistent, i.e. the cases with 0, 1, 2, 3, and 4 args are different than the cases with 5 or more args.  As always, this appears to be a historical compromise to reconcile the behavior of different shells in common cases.<br></div><div><br></div><div><a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html" target="_blank">http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html</a> (scroll down)</div></div></div></div></blockquote><div>Thanks, that explains it!</div><div><br></div><div>I edited a version I was using to address some issues mentioned in this thread.</div><div><a href="https://github.com/spiterikevin/toybox/blob/compoundtest/toys/pending/test.c">https://github.com/spiterikevin/toybox/blob/compoundtest/toys/pending/test.c</a><br></div><div><br></div><div>There are still some differences from coreutils. E.g., in coreutils,</div><div>[ \( \( \) \) \) ] is true because the inner \) is treated as a plain string.</div><div>[ \( \( \( \) \) ] is a syntax error.<br></div><div>Removing one set of outer parentheses gets into the explicit 3-argument special cases and both become true.</div><div>How important is it to match these details to coreutils? In my implementation the 3-argument cases match, but both 5-argument cases are syntax errors.</div><div><br></div><div>Kevin</div></div></div></div></div>