@zephyr
echo "${HOME}/docs"
This is the best way. It’s also the way the Shellcheck
wantssometimes recommends.@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 .
While this looks like a handy tool, it does make me think shell scripting itself needs a cleaner approach than what we have currently.
deleted by creator
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.
This is the way
I also do this so the variables are more easily spotted.
This is the right way
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 inarray
, rather than (Bash:) the number of positional parameters, then the string'array[3]'
.
@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.
- Syntax highlighting and shellcheck have always caught the cases I need to add braces to prevent
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
no
eval
?when you’re paid by character written
This really enterprises my bash.
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!
Read the Bash manual. That one patter on the GP is called “Command Substitution”, you can search for it.
Thanks!
ExplainShell should help
@ilega_dh You don’t need
cat
in cases whengrep "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.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.
deleted by creator
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.
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"
-
I do what the linter tells me to: https://github.com/koalaman/shellcheck
deleted by creator
deleted by creator