News for hackers. Stuff that matters.
Re:Stronger Shell by wereHamster on Wednesday August 12, 2015 @09:29AM (#10047567)
> You must have spaces inside your test expressions (so [[-z $FOO]] won't work; [[ -z $FOO ]] is correct).

That's because '[[' is a special bash extension which started out as a better '[' which is actually a binary (/usr/bin/[). And, well, you have to have a space between an executable and its first argument.

(nowadays '[' and '[[' are builtins in most shells, but the external binary still exists).

Re:Stronger Shell by vodik on Wednesday August 12, 2015 @01:29PM (#10049220)
The core difference is that:

- `[` is treated as a statement

- `[[` is treated as an expression

Which, for example, is why you can't use `>` in `[` based expressions. Bash thinks you want to redirect the output of `[` to somewhere else. This restriction is lifted for `[[` and makes for much more natural looking code.