Feddit.dk
  • Communities
  • Create Post
  • Create Community
  • heart
    Support Lemmy
  • search
    Search
  • Login
  • Sign Up
zephyr@lemmy.world to Programming@programming.dev · 2 years ago

How do you shell expand your variables and why?

lemmy.world

message-square
27
link
fedilink
  • cross-posted to:
  • shell@programming.dev
63

How do you shell expand your variables and why?

lemmy.world

zephyr@lemmy.world to Programming@programming.dev · 2 years ago
message-square
27
link
fedilink
  • cross-posted to:
  • shell@programming.dev
alert-triangle
You must log in or register to comment.
  • thingsiplay@kbin.social
    link
    fedilink
    arrow-up
    58
    ·
    2 years ago

    @zephyr echo "${HOME}/docs"

    • bloopernova@programming.dev
      link
      fedilink
      English
      arrow-up
      12
      ·
      edit-2
      2 years ago

      This is the best way. It’s also the way the Shellcheck wants sometimes recommends.

      • thingsiplay@kbin.social
        link
        fedilink
        arrow-up
        8
        ·
        2 years ago

        @bloopernova As you mention it, here the links for anyone interested: Online tool https://www.shellcheck.net/ and you can install it locally too https://github.com/koalaman/shellcheck .

        • hascat@programming.dev
          link
          fedilink
          English
          arrow-up
          4
          ·
          2 years ago

          While this looks like a handy tool, it does make me think shell scripting itself needs a cleaner approach than what we have currently.

          • thingsiplay@kbin.social
            link
            fedilink
            arrow-up
            1
            ·
            2 years ago

            deleted by creator

      • Gamma@programming.dev
        link
        fedilink
        English
        arrow-up
        6
        ·
        edit-2
        2 years ago

        This isn’t true. Shellcheck doesn’t insist on braces unless it thinks you need them.

        • bloopernova@programming.dev
          link
          fedilink
          English
          arrow-up
          4
          arrow-down
          1
          ·
          2 years ago

          Oh! I didn’t know that (um, obviously lol)

          I’ll edit my comment.

    • Drew Belloc@programming.dev
      link
      fedilink
      arrow-up
      5
      ·
      2 years ago

      This is the way

    • Simulation6@sopuli.xyz
      link
      fedilink
      arrow-up
      4
      ·
      2 years ago

      I also do this so the variables are more easily spotted.

    • Gamma@programming.dev
      link
      fedilink
      English
      arrow-up
      3
      ·
      2 years ago

      This has never stuck with me, and I hadn’t thought about why until now. I have two reasons why I will always write ${x}_$y.z instead of ${x}_${y}.z:

      • Syntax highlighting and shellcheck have always caught the cases I need to add braces to prevent $x_ being expanded as ${x_}.
      • I write a lot of Zsh. In Zsh, braces are optional in way more cases. "$#array[3]" actually prints the length of the third item in array, rather than (Bash:) the number of positional parameters, then the string 'array[3]'.
      • thingsiplay@kbin.social
        link
        fedilink
        arrow-up
        3
        ·
        2 years ago

        @gamma I just use them out of consistency and principle, so I don’t need to think in which case it is required or not.

      • Cyclohexane@lemmy.ml
        link
        fedilink
        arrow-up
        1
        ·
        2 years ago

        I will always write ${x}_$y.z instead of ${x}_${y}.z:

        The difference between the two seems different to what’s in the OP. Is there a typo here?

        • Gamma@programming.dev
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 years ago

          in the OP

          My reply is to a commenter who said they prefer "${HOME}/docs" over both options in the original image ("$HOME/docs" or "$HOME"/docs). Many people prefer to always include braces around the parameter name out of consistency, instead of only when they are required.

          My comment explained why my habit is to only include braces when they are necessary.

    • brennesel@feddit.de
      link
      fedilink
      arrow-up
      5
      arrow-down
      2
      ·
      2 years ago

      This is the right way

  • ilega_dh@feddit.nl
    link
    fedilink
    arrow-up
    38
    ·
    2 years ago

    find “$(echo $HOME > variable_holder.txt && cat variable_holder.txt)/$(cat alphabet.txt | grep “d”) $(cat alphabet.txt | grep “o”)$(cat alphabet.txt | grep “c”)$(cat alphabet.txt | grep “s”)”

    This is the easiest method

    • Eager Eagle@lemmy.world
      link
      fedilink
      English
      arrow-up
      7
      ·
      2 years ago

      when you’re paid by character written

    • igorlogius@lemmy.world
      link
      fedilink
      English
      arrow-up
      7
      ·
      edit-2
      2 years ago

      deleted by creator

    • ale@lemmy.world
      link
      fedilink
      arrow-up
      5
      ·
      edit-2
      1 year ago

      deleted by creator

    • thingsiplay@kbin.social
      link
      fedilink
      arrow-up
      5
      arrow-down
      2
      ·
      edit-2
      2 years ago

      @ilega_dh You don’t need cat in cases when grep "d" alphabet.txt can read from file too. Edit: But obviously your comment was more of a joke to over complicate it. So never mind then.

      • gendulf@kbin.social
        link
        fedilink
        arrow-up
        3
        ·
        2 years ago

        To be safe, should probably output grep to a file, then cat that.

        • ilega_dh@feddit.nl
          link
          fedilink
          arrow-up
          2
          ·
          2 years ago

          Agreed. Everything in Linux is a file so let’s keep it that way.

          • ImpossibleRubiksCube@programming.dev
            link
            fedilink
            arrow-up
            3
            ·
            edit-2
            2 years ago

            deleted by creator

    • monsterpiece42@reddthat.com
      link
      fedilink
      arrow-up
      1
      ·
      2 years ago

      What should I search to better understand what is written here? Don’t mind learning myself, just looking for the correct keywords. Thanks!

      • marcos@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        2 years ago

        Read the Bash manual. That one patter on the GP is called “Command Substitution”, you can search for it.

        • monsterpiece42@reddthat.com
          link
          fedilink
          arrow-up
          1
          ·
          2 years ago

          Thanks!

      • oneiros@lemmy.blahaj.zone
        link
        fedilink
        arrow-up
        3
        arrow-down
        1
        ·
        2 years ago

        This comment is a joke and you wouldn’t want to do it like that in reality, but here are some related keywords you could look up: “Unix cat”, “Unix pipeline”, “grep”, “output redirection”, “command substitution”.

        • monsterpiece42@reddthat.com
          link
          fedilink
          arrow-up
          1
          ·
          2 years ago

          Perfect, I have some light reading for the evening!

      • priapus@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 years ago

        ExplainShell should help

  • key@lemmy.keychat.org
    link
    fedilink
    English
    arrow-up
    17
    ·
    2 years ago

    First one, then the other, then I forget the quotes, then I put them in single quotes by accident, then I utilize that “default value” colon syntax in case I’m missing HOME , then I just stick to ~ for the rest of the file.

  • Gamma@programming.dev
    link
    fedilink
    English
    arrow-up
    6
    ·
    edit-2
    2 years ago

    Typically find "$HOME/docs", but with a few caveats:

    • In Zsh or Fish, the quotes are unnecessary: find $HOME/docs

    • If I’m using anything potentially destructive: mv "${HOME:?}/bin" ...

    • Of course, if it’s followed by a valid identifier character, I’ll add braces: "${basename}_$num.txt"

  • karlhungus@lemmy.ca
    link
    fedilink
    arrow-up
    5
    ·
    2 years ago

    I do what the linter tells me to: https://github.com/koalaman/shellcheck

  • ImpossibleRubiksCube@programming.dev
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    2 years ago

    deleted by creator

  • thingsiplay@kbin.social
    link
    fedilink
    arrow-up
    1
    ·
    2 years ago

    deleted by creator

Programming@programming.dev

programming@programming.dev

Subscribe from Remote Instance

Create a post
You are not logged in. However you can subscribe from another Fediverse account, for example Lemmy or Mastodon. To do this, paste the following into the search field of your instance: !programming@programming.dev

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person’s post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you’re posting long videos try to add in some form of tldr for those who don’t want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



Visibility: Public
globe

This community can be federated to other instances and be posted/commented in by their users.

  • 122 users / day
  • 1.06K users / week
  • 2.91K users / month
  • 7.05K users / 6 months
  • 55 local subscribers
  • 20.1K subscribers
  • 2.17K Posts
  • 33.2K Comments
  • Modlog
  • mods:
  • snowe@programming.dev
  • Ategon@programming.dev
  • MaungaHikoi@lemmy.nz
  • BE: 0.19.11
  • Modlog
  • Legal
  • Instances
  • Docs
  • Code
  • join-lemmy.org