• 𝘋𝘪𝘳𝘬@lemmy.ml
    link
    fedilink
    arrow-up
    11
    ·
    1 day ago

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

  • N0x0n@lemmy.ml
    link
    fedilink
    arrow-up
    7
    ·
    2 days ago

    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

    • Ephera@lemmy.ml
      link
      fedilink
      English
      arrow-up
      11
      ·
      1 day ago

      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.

      • Anna@lemmy.ml
        link
        fedilink
        arrow-up
        3
        ·
        14 hours 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

      • Oriel Jutty@infosec.exchange
        link
        fedilink
        arrow-up
        10
        ·
        1 day ago

        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
        
        • N0x0n@lemmy.ml
          link
          fedilink
          arrow-up
          6
          ·
          1 day 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 !

      • balsoft@lemmy.ml
        link
        fedilink
        arrow-up
        11
        arrow-down
        1
        ·
        edit-2
        1 day 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!

    • ☆ Yσɠƚԋσʂ ☆@lemmy.mlOP
      link
      fedilink
      arrow-up
      18
      arrow-down
      1
      ·
      2 days ago

      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

      • eldavi@lemmy.ml
        link
        fedilink
        English
        arrow-up
        6
        ·
        2 days 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

      • N0x0n@lemmy.ml
        link
        fedilink
        arrow-up
        3
        ·
        2 days ago

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

    • BartyDeCanter@lemmy.sdf.org
      link
      fedilink
      arrow-up
      11
      ·
      2 days ago

      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.

      • Ephera@lemmy.ml
        link
        fedilink
        English
        arrow-up
        4
        ·
        1 day 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.