this post was submitted on 26 Aug 2023
100 points (98.1% liked)

linuxmemes

23433 readers
784 users here now

Hint: :q!


Sister communities:


Community rules (click to expand)

1. Follow the site-wide rules

2. Be civil
  • Understand the difference between a joke and an insult.
  • Do not harrass or attack users for any reason. This includes using blanket terms, like "every user of thing".
  • Don't get baited into back-and-forth insults. We are not animals.
  • Leave remarks of "peasantry" to the PCMR community. If you dislike an OS/service/application, attack the thing you dislike, not the individuals who use it. Some people may not have a choice.
  • Bigotry will not be tolerated.
  • 3. Post Linux-related content
  • Including Unix and BSD.
  • Non-Linux content is acceptable as long as it makes a reference to Linux. For example, the poorly made mockery of sudo in Windows.
  • No porn. Even if you watch it on a Linux machine.
  • 4. No recent reposts
  • Everybody uses Arch btw, can't quit Vim, <loves/tolerates/hates> systemd, and wants to interject for a moment. You can stop now.
  • 5. πŸ‡¬πŸ‡§ Language/язык/Sprache
  • This is primarily an English-speaking community. πŸ‡¬πŸ‡§πŸ‡¦πŸ‡ΊπŸ‡ΊπŸ‡Έ
  • Comments written in other languages are allowed.
  • The substance of a post should be comprehensible for people who only speak English.
  • Titles and post bodies written in other languages will be allowed, but only as long as the above rule is observed.
  • 6. (NEW!) Regarding public figuresWe all have our opinions, and certain public figures can be divisive. Keep in mind that this is a community for memes and light-hearted fun, not for airing grievances or leveling accusations.
  • Keep discussions polite and free of disparagement.
  • We are never in possession of all of the facts. Defamatory comments will not be tolerated.
  • Discussions that get too heated will be locked and offending comments removed.
  • Β 

    Please report posts and comments that break these rules!


    Important: never execute code or follow advice that you don't understand or can't verify, especially here. The word of the day is credibility. This is a meme community -- even the most helpful comments might just be shitposts that can damage your system. Be aware, be smart, don't remove France.

    founded 2 years ago
    MODERATORS
     
    top 23 comments
    sorted by: hot top controversial new old
    [–] SpaceNoodle@lemmy.world 89 points 2 years ago* (last edited 2 years ago) (3 children)

    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 2 years ago (2 children)

    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?

    [–] RazorsLedge@lemmy.world 24 points 2 years ago* (last edited 2 years ago) (1 children)
    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 2 years ago (1 children)

    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 2 years ago (1 children)

    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 2 years ago (2 children)

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

    [–] vrighter@discuss.tchncs.de 2 points 2 years ago

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

    [–] rtxn@lemmy.world 1 points 2 years ago (1 children)

    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 2 years ago

    I did use triple backticks

    [–] SpaceNoodle@lemmy.world 23 points 2 years ago* (last edited 2 years 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.

    [–] FuglyDuck@lemmy.world 1 points 2 years ago* (last edited 2 years ago)

    β€œConcatenating”….

    …. That sounds either exceptionally painful or extremely fun.

    Quite possibly both…

    [–] ArtificialLink@lemmy.ml 1 points 2 years ago (1 children)

    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 2 years ago (1 children)

    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 2 years ago

    Too late lol.

    [–] user224@lemmy.sdf.org 19 points 2 years ago

    There's another
    ${HOME}/docs/

    [–] cttttt@lemmy.world 11 points 2 years 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 2 years ago (2 children)

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

    I don't think this is correct. Consider what you see from using sh -c -- 'var="a " && printf "%s\n" "${var}"-z'

    If "${var}"-z resulted in two arguments instead of one, I'd see "a" and "-z" on different lines, but I see them on the same line, which means they are treated as a single argument.

    [–] venusenvy47@lemdro.id 1 points 2 years ago (1 children)

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

    [–] DoomBot5@lemmy.world 1 points 2 years 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 7 points 2 years ago
    [–] Andrew15_5@mander.xyz 3 points 2 years ago

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

    [–] Matriks404@lemmy.world 1 points 2 years 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.