Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Parameter Expansion



> On 15/07/2025 16:01 BST Eric Cook <llua@xxxxxxx> wrote:
> 
>  
> On 7/15/25 10:44 AM, Vin Shelton wrote:
> > I don't understand the order of parameter expansion. Consider the following example:
> > 
> > zsh -f
> > export HOME=/home/acs
> > smaug% export SCMROOT=/home/acs/scmroot
> > smaug% echo ${SCMROOT:s-$HOME/--}
> > 
> > This yields /home/acs/scmroot", but I expected "scmroot".
> > TIA,
> >   Vin Shelton
> > 
> 
> The history modifier doesn't create a new context where the parameter
> expansion code recurses and resolves any parameters within it's
> operands.
> It is searching for the literal string $HOME.

The fix is to use the parameter system's own substitution code, which
does recursively handle parameters.  The easiest one to use in this case
is:

echo ${SCMROOT#$HOME/}

There are more general substitution commands but this fits the bill
here.

pws




Messages sorted by: Reverse Date, Date, Thread, Author