Date: Tue, 24 Sep 2024 00:56:40 +0200 From: Steffen Nurpmeso <stef...@sdaoden.eu> Message-ID: <20240923225640.BZkYDiMv@steffen%sdaoden.eu>
| and then (in ~/.shrc) | | eval "___isinc=\$___SHRC$$" | if [ -z "${___isinc}" ]; then | eval "___SHRC${$}=YES" | export ___SHRC${$} | case ${-} in | *i*|*m*) # {{{ | ... | esac | fi | unset ___isinc Random suggestions, preceded by a question? Why are you exporting ___SHRC$$ ? As long as this shell continues running, there cannot be another process with the same $$ so the include guard cannot possibly have any effect anywhere else, and this shell doesn't need the variable to be exported to see it. By the time $$ is the same value in some other shell, you want the .shrc processed, don't you? Given that it doesn't need exporting, it also doesn't need the $$ in its name either, so if $___SHRC then ___SHRC=false case $- in *i*|*m*) # whatever ;; *) # whatever else ;; esac # common stuff for all cases fi If you insist on quoting the expansion in the first line, it needs to become: if "${___SHRC:-:}" even if you want too keep the $$ and export for some reason if eval "\$___SHRC$$" then eval "___SHRC$$=false" export "___SHRC$$" # etc fi with the similar variation if you want the ___SHRC$$ expansion quoted: if eval "\"\${___SHRC$$:-:}\"" kre ps: writing $$ (or any of the special params) as ${$} (etc) is really taking things a little far, unless you want a more complex expansion, like ${!:-$$} or something. It is even weirder when you write $$ in one place and ${$} in others (and use $- rather than ${-}). And of course using $# rather than ${#} makes it clear that you want the number of set positional params, and not the length of something that you forgot to insert...