Arguably, I never fully learned Bash syntax, but it also is just a stupid if-statement. There shouldn’t be that much complexity in it.
There isn’t. The syntax is
if COMMANDthenCOMMAND(s)...elseCOMMAND(s)...fi
I believe, if you write the then onto the next line, then you don’t need the semicolon.
Yes, but that’s true of all commands.
foo; bar; baz
is the same as
foobarbaz
All the ]
and -z
stuff has nothing to do with if
. In your example, the command you’re running is literally called [
. You’re passing it three arguments: -z
, "$var"
, and ]
. The ]
argument is technically pointless but included for aesthetic reasons to match the opening ]
(if you wanted to, you could also write test -z "$var"
because [
is just another name for the test
command).
Since you can logically negate the exit status of every command (technically, every pipeline) by prefixing a !
, you could also write this as:
if ! test "$var"; then ...
The default mode of test
(if given one argument) is to check whether it is non-empty.
Now, if you don’t want to deal with the vagaries of the test
command and do a “native” string check, that would be:
case "$var" in "") echo "empty";; *) echo "not empty";;esac
Isn’t this COBOL or 4GL or something?
Strictly speaking, it should be
Unsafe block syntax in C++
{ ...}
Incidentally, this is an anti-pattern: http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3