this post was submitted on 05 Mar 2025
193 points (99.5% liked)
Programmer Humor
34474 readers
28 users here now
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Here's an example, I have looked up many times (like just now), which checks whether a string is empty:
Why
-z
? I have no idea. I will also routinely forget the]; then
part. I believe, if you write thethen
onto the next line, then you don't need the semicolon. And then someone's probably gonna tell me to use double-brackets[[ ]]
instead, which probably does something.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
Yes, but that's true of all commands.
is the same as
All the
]
and-z
stuff has nothing to do withif
. 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 writetest -z "$var"
because[
is just another name for thetest
command).Since you can logically negate the exit status of every command (technically, every pipeline) by prefixing a
!
, you could also write this as: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:My god... I'm so confused by your comment XD ! OP's command is something I already came across, so I somehow got it... But your comment put me in total brain rot !
Now this is enlightening
From
man test
(note that[ <expr> ]
is just sugar fortest <expr>
):So,
-z
stands for Zero.Hope this helps you remember it!
You could write that as 1 line:
[ -z "$var" ] && echo "empty" || echo "no it aint"
Incidentally, this is an anti-pattern: http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3
@Tangentism @Ephera Did you mean:
?
-z
means zero length and mostly[[ ]]
are used when you want to add multiple conditions. But there are also few test cases which are only in bash so they also need double brackets