98
top 22 comments
sorted by: hot top controversial new old
[-] SpaceNoodle@lemmy.world 87 points 1 year ago* (last edited 1 year ago)

find "${HOME}/docs/"

You want the full path in quotes so that paths with spaces are handled properly. Brackets are good practice when concatenating strings.

[-] Synthead@lemmy.world 7 points 1 year ago

If the strings don't contain characters that help define a variable, like an underscore, how is it better practice to use curlies? It's it just for consistency? Have you had any style guides or linters critique the use of variables without them?

[-] SpaceNoodle@lemmy.world 23 points 1 year ago* (last edited 1 year ago)

More than anything, I find that it's a good habit to maintain in order to avoid simple mistakes. It also makes variables easier to spot in code and maintains consistency.

[-] RazorsLedge@lemmy.world 22 points 1 year ago* (last edited 1 year ago)
foo=ding
foobar=dong

echo \$foobar

Brackets make it explicit what you're trying to do. Do you want "dingbar" or do you want "dong"? I forget what the actual behavior is if you don't use brackets here, because I always use brackets for this reason now

[-] subtext@lemmy.world 5 points 1 year ago

I believe the actual behavior here would be printing “dong” as the shell interpreter is greedy in its evaluation of variables.

[-] vrighter@discuss.tchncs.de 2 points 1 year ago

the actual behavior here is to echo the literal string "$foobar", because the $ sign is escaped. so no variable expansion will take place at all.

[-] RazorsLedge@lemmy.world 2 points 1 year ago

Oh lol. It doesn't show the $ at all on my mobile app till I escaped it

[-] vrighter@discuss.tchncs.de 2 points 1 year ago

ah, so it's up to the client. I'm using jerboa, in this case

[-] rtxn@lemmy.world 1 points 1 year ago

You should use markdown's inline code (single `backtick`) and

block code
(triple backtick)

tags. They are consistent across most markdown renderers (except Reddit's, which uses four-space indentations (like, who the fuck thought that was a good idea?))

[-] RazorsLedge@lemmy.world 1 points 1 year ago

I did use triple backticks

[-] FuglyDuck@lemmy.world 1 points 1 year ago* (last edited 1 year ago)

“Concatenating”….

…. That sounds either exceptionally painful or extremely fun.

Quite possibly both…

[-] ArtificialLink@lemmy.ml 1 points 1 year ago

This shit fucked me up so much when i was learning linux stuff. Especially cause a lot of my file paths had spaces. This is the way.

[-] ExLisper@linux.community 1 points 1 year ago

The lesson for me was not to create paths with spaces. There are none in Linux unless you create them.

[-] ArtificialLink@lemmy.ml 1 points 1 year ago

Too late lol.

[-] user224@lemmy.sdf.org 20 points 1 year ago

There's another
${HOME}/docs/

[-] cttttt@lemmy.world 10 points 1 year ago

tl;dr - Second option usually.

I think a huge part of shell programming (besides recognizing when anything more maintainable will do 😂😂😂) is trying to allow others who aren't as familiar to maintain what you've written. Shell is full of pitfalls, not the least of which is quoting and guaranteeing how many arguments you pass to commands and functions.

To me, the whole point of quoting here is to be crystal clear about where command arguments begin and end in spite of variable substitution. For this reason I usually go for the second option. It very clearly describes how I'm trying to avoid a pitfall by wrapping each argument to find in a pair of quotes: in this case, double quotes to allow variable substitution.

Sometimes it's clearer to use the first approach. For example, if the constant parts of one of those arguments contains a lot of special characters, it may make it clearer to use the first approach with the constant parts wrapped in single quotes.

But even then there are more clear ways to create a string out of other strings. For example, the slightly slower, and more verbose use of printf and a variable, and then using that variable as an argument...wrapped in double quotes since it could contain special characters.

[-] DoomBot5@lemmy.world 8 points 1 year ago

First one has the pitfall of a space at the end of the variable still causing it to fail.

[-] venusenvy47@lemdro.id 1 points 1 year ago

Would a space at the end of the variable be ignored in the second one, though?

[-] DoomBot5@lemmy.world 1 points 1 year ago

It would still be considered a single variable because the entire string is quoted. The first scenario would have split it into 2 variables.

[-] ninekeysdown@lemmy.world 6 points 1 year ago
[-] Andrew15_5@mander.xyz 2 points 1 year ago

I would've answered but I'm blind now /s

[-] Matriks404@lemmy.world 2 points 1 year ago

Bash has the worst syntax rules I have seen, and the fact that you can do both of these doesn't help.

I am probably going to switch to fish for any scripting, Python would probably be better, but it seems to be much more complicated and I am too lazy to learn it.

this post was submitted on 26 Aug 2023
98 points (98.0% liked)

linuxmemes

20742 readers
269 users here now

I use Arch btw


Sister communities:

Community rules

  1. Follow the site-wide rules and code of conduct
  2. Be civil
  3. Post Linux-related content
  4. No recent reposts

Please report posts and comments that break these rules!

founded 1 year ago
MODERATORS