3 ms·
POSIX did standardize those, but the functionality is marked XSI, so only XSI-conforming implementations are required to provide it. There is never a reason to
by hvdijk 6y ago
POSIX did standardize those, but the functionality is marked XSI, so only XSI-conforming implementations are required to provide it.
There is never a reason to use them, though. They can be replaced by the shell's && and || operators, which nicely bypasses the parsing ambiguities at the same time.
- dataflow 6y ago> There is never a reason to use them, though. They can be replaced by the shell's && and || operators, which nicely bypasses the parsing ambiguities at the same time. Not sure I agree. The equivalent of more complicated expressions like (a AND b) OR (c AND d) with && and || isn't always so "nice" IMO. e.g., try it for this: [ -f a -a -f b -o -f c -a -f d ] I think the simplest syntax will require you to spawn subshells, which is neither particularly nice, nor particularly performant (especially on Windows).
- sltkr 6y agoIs this really so much worse: { test -f a && test -f b; } || { test -f c && test -f d; } ? Yes, it's more verbose, but the original expression isn't particularly readable either, and if you'd want to evaluate something like (a OR b) AND (c OR d) you'd need to introduce parentheses anyway.
- hvdijk 6y agoNote also that this does not need any subshells. I think dataflow was thinking of (test -f a && test -f b) || (test -f c && test -f d) instead, but { } isn't worse than that.
- dataflow 6y agoYeah almost. I was thinking of ([ -f a ] && [ -f b ]) || ([ -f c ] && [ -f d ]) instead of (test -f a && test -f b) || (test -f c && test -f d)
- dolmen 6y agoParentheses launch a subshell, so you probably want to use accolades instead: {[ -f a ] && [ -f b ] ;} || { [ -f c ] && [ -f d ] ;}
- dataflow 6y agoWith braces I'd prefer the test syntax actually, this is too many special characters to be comfortably readable for me. And yes I know it creates subshells, that was precisely what I was saying in my comment where I said the simplest syntax I could think of (i.e. that very code) creates subshells.
- dataflow 6y agoIt's not "so much" worse, it's just mildly worse. All I was saying here was the verbosity is a reason for using them. Obviously there are reasons not to use them too, which I said in my own top comment.