this post was submitted on 05 Mar 2025
192 points (99.5% liked)

Programmer Humor

34449 readers
225 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
all 27 comments
sorted by: hot top controversial new old
[–] [email protected] 2 points 5 days ago

Configuring CORS 😭

[–] [email protected] 12 points 2 weeks ago (1 children)

I gave up Bash scripting. I explicitly do "shell scripting" now, where "shell" is implied to be a POSIX compliant shell of any type.

[–] [email protected] 7 points 2 weeks ago (1 children)

But, but like ... hear me out.

echo $((1+1))

[–] [email protected] 1 points 1 week ago (1 children)

That is a posixly correct method to do arithmetic expressions.

[–] [email protected] 1 points 1 week ago (1 children)

Huh, seems you're right. I was under the impression this wouldn't work in dash but apparently that's wrong.

[–] [email protected] 1 points 1 week ago

Yep! The functionality for performing arithmetic expressions this way is called “arithmetic expansion”.

2.6.4 Arithmetic Expansion

Arithmetic expansion provides a mechanism for evaluating an arithmetic expression and substituting its value. The format for arithmetic expansion shall be as follows:

$((expression))

The expression shall be treated as if it were in double-quotes, except that a double-quote inside the expression is not treated specially. The shell shall expand all tokens in the expression for parameter expansion, command substitution, and quote removal.

Next, the shell shall treat this as an arithmetic expression and substitute the value of the expression. […]

https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_06_04

[–] [email protected] 6 points 2 weeks ago (4 children)

I'm not very acquainted with any programming language so maybe I'm wrong here (or I didn't get the joke? XD) but bash didn't change much in the past few years, I even read some scripts more than 10 years still works because the syntax stays the same (or doesn't change a lot ...)

Compared with the switch from python 2 -> python 3 I read a lot of people pulling their hair off xD

[–] [email protected] 20 points 2 weeks ago (2 children)

the joke is that bash syntax is terrible and you always forget how to do basic things in it after not touching it for a while

[–] [email protected] 7 points 2 weeks ago

i forget on the same day; i literally keep a log of everything i did that day so i can look it up. lol

[–] [email protected] 4 points 2 weeks ago

Okay XD it's less funny when you have to explain the joke XD sorry !!

[–] [email protected] 11 points 2 weeks ago (3 children)

Only sorta related, but now I have an excuse to tell my anecdote...

One job ago I had a manager who decided that he would convert some of our helper scripts from bash to Python for reasons. I was new there and so didn't realize what he was doing, or that he had started the process just as I was going through orientation. However, I ended up being the reviewer for the PR.

This was the worst Python I had ever seen but in such odd ways and it mostly worked. It almost felt like it was written by someone who knew bash really well but had never learned any other languages, or thought that bash was just so damn good that he wanted to turn every other language into it. For example, instead of using argparse he was manually looping through argv and parsing them one at a time. And instead of using a standard for each in foo loop, there were index variables and while loops. And certainly there were no comprehensions or any understanding of the basic built in data structures other than using lists as arrays.

So I did a review, assuming that this person was just really new to python and tried to gently coach him towards basic Pythonisms. His response was: "Oh yeah, I just ran them through ChatGPT and assumed it was all ok."

I quit about two months later.

[–] [email protected] 10 points 2 weeks ago

That twist at the end. Bloody hell.

[–] [email protected] 5 points 2 weeks ago

Yeah, that's kind of my least favorite part about the existence of LLMs. Before, when someone wrote some code, there was a non-zero chance that they understood what they were doing and that the code is at least sane on a basic level. If they did some complex shit or even just wrote rather verbose code, you could be reasonably certain that they tried something simpler first.

Now, all of those assumptions are out the window. The biggest dumbass can generate code that looks alright at first glance and if you have to review it, you really don't know how to interpret it or how much to explain when you find fairly obvious mistakes.

[–] [email protected] 3 points 2 weeks ago

Thats sounds a lot like C, in bash you cans also do for item in list; do echo $item; done

[–] [email protected] 11 points 2 weeks ago (4 children)

Here's an example, I have looked up many times (like just now), which checks whether a string is empty:

var=""
if [ -z "$var" ]; then
    echo "empty"
else
    echo "not empty"
fi

Why -z? I have no idea. I will also routinely forget the ]; then part. I believe, if you write the then 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.

[–] [email protected] 11 points 2 weeks ago (2 children)

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
[–] [email protected] 7 points 2 weeks ago

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 !

[–] [email protected] 5 points 2 weeks ago

Now this is enlightening

[–] [email protected] 10 points 2 weeks ago* (last edited 2 weeks ago)

Why -z? I have no idea.

From man test (note that [ <expr> ] is just sugar for test <expr>):

       -n STRING
              the length of STRING is nonzero

       -z STRING
              the length of STRING is zero

So, -z stands for Zero.

Hope this helps you remember it!

[–] [email protected] 3 points 2 weeks ago (2 children)

You could write that as 1 line:

[ -z "$var" ] && echo "empty" || echo "no it aint"

[–] [email protected] 4 points 2 weeks ago

@Tangentism @Ephera Did you mean:

echo "${var:-empty}${var:+no it aint}"

?

[–] [email protected] 3 points 1 week ago

-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

[–] [email protected] 2 points 1 week ago (1 children)

Will anyone acknowledge the fact that you only learn to ride a bike once? To me, the saying "is like riding a bike" means the opposite...

[–] [email protected] 2 points 1 week ago (1 children)