My primary use case for Amber is when I need to write a Bash script but don’t remember the silly syntax. My most recent Bash mistake was misusing test -n and test -z. In Amber, I can just use something == "" or len(something) == 0

  • IanTwenty@piefed.social
    link
    fedilink
    English
    arrow-up
    5
    ·
    18 hours ago

    Interesting. There is this example in the docs:

    let result = $ cat file.txt | grep "READY" $ failed {
        echo "Failed to read the file"
    }
    

    https://docs.amber-lang.com/basic_syntax/commands

    How can we know for sure what failed here? Was it the cat or the grep? My instinct says the pipe returns the code of the last cmd or failure, which could be either.

    Perhaps it’s just a contrived example and it would be better to separate testing file existence from grepping in real code…

    • lens0021@programming.devOP
      link
      fedilink
      arrow-up
      1
      ·
      48 minutes ago

      Yep, the code you provided is compiled into this:

      command_0="$(cat file.txt | grep "READY")"
      __status=$?
      if [ "${__status}" != 0 ]; then
          echo "Failed to read the file"
      fi
      

      So, the outcome would depend on the pipefail option. (set -o pipefail)

      As you suggested, an Amberic snippet would be:

      import { file_read } from "std/fs"
      import { match_regex } from "std/text"
      
      const result = file_read("file.txt") failed {
          echo "Failed to read the file"
      }
      if match_regex(result, "READY"):
          echo "file.txt contains READY"