Looks like $(…) is better, but I still pretty often see `…` in some articles.

  • IanTwenty@piefed.social
    link
    fedilink
    English
    arrow-up
    18
    ·
    9 months ago

    $() for me, to quote from

    https://www.shellcheck.net/wiki/SC2006

    Backtick command substitution `...` is legacy syntax with several issues.

    1. It has a series of undefined behaviors related to quoting in POSIX.
    2. It imposes a custom escaping mode with surprising results.
    3. It’s exceptionally hard to nest.

    $(...) command substitution has none of these problems, and is therefore strongly encouraged.

    • confusedpuppy@lemmy.dbzer0.com
      link
      fedilink
      arrow-up
      4
      ·
      9 months ago

      Shellcheck is a great tool for scripting.

      When I’m building a new script, I usually add the following function to the script and run the function before anything else. The script will exit immediately if any issues are found so I have a chance to correct things. If no issues are found, the script will simply continue.

      It’s small and simple so it’s easy to remove when I’m done building a script.

      script_check() {
          if ! shellcheck "${0}"; then
              exit 1
          fi
      }
      
      script_check
      

      Shellcheck has helped me learn a lot about scripting and I strongly recommend using it too.

      • IanTwenty@piefed.social
        link
        fedilink
        English
        arrow-up
        5
        ·
        9 months ago

        That’s good. There are also editors that can run it for you and highlight the issues whilst you type, neovim being one.

    • trevor (any/all) @lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      2
      ·
      9 months ago

      I prefer this as well, but just adding that Fish also supports $() for those that don’t know.

      I keep hearing people that haven’t used modern versions of Fish say that it’s somewhat different from Bash and strays from POSIX compatibility quite a bit. While the latter is true, Fish has added many bash-isms over the years, so most scripting idioms you’re familiar with will work there too.

  • excess0680
    link
    fedilink
    arrow-up
    3
    ·
    9 months ago

    By some sheer coincidence, I searched this topic today. I’ve been a consistent user of the parenthesis expansion, but never thought of why I preferred one or the other.

    I suppose the primary advantage is that $() will expand in a consistent way. You can even nest quotes and more expansions in one, while you’d struggle the same with backtick notation.

    So I’ll just keep using parentheses.