On 2023/10/11 19:10:43 +0000, Klemens Nanni <k...@openbsd.org> wrote:
> On Wed, Oct 11, 2023 at 03:44:47PM +0200, Omar Polo wrote:
> > -@@ -27,7 +27,7 @@ export LEIN_HOME="${LEIN_HOME:-"$HOME/.lein"}"
> > +@@ -48,19 +48,21 @@ function make_native_path {
> > + #  usage : add_path PATH_VAR [PATH]...
> > + function add_path {
> > +     local path_var="$1"
> > ++    local val=""
> > +     shift
> > +     while [ -n "$1" ];do
> > +         # 
> > http://bashify.com/?Useful_Techniques:Indirect_Variables:Indirect_Assignment
> > +-        if [[ -z ${!path_var} ]]; then
> 
> The comment's link just tells me the domain is for sale and bash(1) does
> not document ${!name} (only ${!prefix*} and other forms);  not sure what
> they do here, but it looks like a simple empty check suffices?

It's documented here: apparentely

https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

: If the first character of parameter is an exclamation point (!), and
: parameter is not a nameref, it introduces a level of indirection

The idea of this `add_path' is to take a variable name as the first
argument and append the rest of the arguments.

> > +-          export ${path_var}="$(make_native_path "$1")"
> > ++        if [ -z "$val" ]; then
> 
> ksh(1) has [[ and you should stick to that, there quoting is not needed
> compared to [ -- see the manual for differences.

I know the difference between [ and [[.  I try to stick with the posix
sh subset even in a blatantly bash/ksh evironment, but can change to
the fancy [[ if you prefer.

> > ++          val="$(make_native_path "$1")"
> > +         else
> > +-          export ${path_var}="${!path_var}${delimiter}$(make_native_path 
> > "$1")"
> > ++          val="${val}${delimiter}$(make_native_path "$1")"
> > +         fi
> > +     shift
> > +     done
> > ++    export ${path_var}="$val"
> 
> Instead of deferring the export, does it work if you just remove the two !
> and leave the rest as-is?

Nope, because we loose the initial value.

The alternative would have been to use eval to get the value of
$path_var (not the content of path_var but the content of the variable
named "$path_var").

Reply via email to