On Fri, May 24, 2024 at 08:57:27AM +0000, Laurent Bercot wrote:
> Does that solve your issue?
>
> --
> Laurent
Sorry, but your suggestions are completely useless.
>
> > To prevent literal "$y"s or "${y}"s in the value of VARA ($x) from
> > expanding, you must replace the second expansion command with a
> > multisubstitute, and give the variable that was declared before
> > multisubsitete another name using define
>
> I would argue the opposite, i.e. that parallel substitution
> (using multisubstitute) should be the norm, and that serial substitution
> should only happen when you know you need the result of an early
> substitutions in a later one.
>
> Which means I would rewrite your example as:
>
> multisubstitute
> {
> importas -i x VARA
> importas -i y VARB
> }
> cmdA argA $x
> cmdB argB $x $y
>
> and there would be no problem with literal $y being replaced in the
> expansion of $x. This is valid with elglob too.
>
The original code was
importas -i x VARA
cmdA argA $x
multisubstitute {
define newx $x
importas -i y VARB
}
cmdB argB $newx $y
VARB can be set by cmdA, which is a command that needs VARA to be
expanded to run; which is a *extremely* common thing even with the
standard execline utitlities.
E.g. wait, pipeline, ...
> Your example with backtick doesn't work because backtick is not a
> substitution command, but let's assume you wanted "importas foo BAR"
I am sorry, yes.
elglob cfiles *.c
foreground { cmdA argA $cfiles }
backtick FOO { bar }
multisubstitute {
defines newcfiles { $cfiles }
importas -i foo FOO
}
cmdB argB $foo $cfiles
> instead; and your use of "cmdA argA $cfiles" followed by the rest
> of the script is sketchy, because if cmdA takes a variable number of
> arguments, it would also take the whole rest of the script, so let's
> put it in a foreground block.
>
> So you would have something like:
>
> multisubstitute
> {
> elglob cfiles *.c
> importas -i foo BAR
> }
> foreground { cmdA argA $cfiles }
> cmbB argB $foo $cfiles
>
> and there will be no problem in the expansion of $foo either.
>
But that is wrong; you are assuming that cmdA does not create/deletes
files; I don't think it is that unreasonable to want to use the same
list of files for two commands instead of expanding *.c twice that
results in different values.
o/
emanuele6
Received on Fri May 24 2024 - 14:17:23 CEST