Gamma
link
fedilink
English
6
edit-2
1Y

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"

key
link
fedilink
English
171Y

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.

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

This really enterprises my bash.

igorlogius
link
fedilink
English
71Y

no eval ?

thingsiplay
link
fedilink
3
edit-2
1Y

@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
link
fedilink
31Y

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

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

Damn it, I’m almost out of A4 paper though.

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

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”.

Perfect, I have some light reading for the evening!

ExplainShell should help

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

Thanks!

Eager Eagle
link
fedilink
English
71Y

when you’re paid by character written

cd $HOME/././././././././././././././././.... just for kicks.

thingsiplay
link
fedilink
601Y

@zephyr echo "${HOME}/docs"

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

Drew Belloc
link
fedilink
51Y

This is the way

Gamma
link
fedilink
English
31Y

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]'.
Cyclohexane
link
fedilink
11Y

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
link
fedilink
English
11Y

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.

thingsiplay
link
fedilink
31Y

@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.

This is the right way

@bloopernova@programming.dev
link
fedilink
English
13
edit-2
1Y

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

Gamma
link
fedilink
English
6
edit-2
1Y

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

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

I’ll edit my comment.

thingsiplay
link
fedilink
81Y

@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
41Y

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
link
fedilink
11Y

deleted by creator

thingsiplay
link
fedilink
11Y

deleted by creator

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

Create a post

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



  • 1 user online
  • 1 user / day
  • 1 user / week
  • 1 user / month
  • 1 user / 6 months
  • 1 subscriber
  • 1.21K Posts
  • 17.8K Comments
  • Modlog