• 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
      ·
      22 hours 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 !