On Tuesday 18 April 2006 07:11, Benno Schulenberg 
<[EMAIL PROTECTED]> wrote about 'Re: [gentoo-user] shell 
script':
> Zac Slade wrote:
> > On Tuesday 18 April 2006 00:34, [EMAIL PROTECTED] wrote:
> > > In a shellp script, let
> > >        STRING="a.txt b.txt c.txt"
> > > And I want to delete a sub-string from $STRING, for example
> > > b.txt, and then we got
> > >        $STRING is "a.txt c.txt"
> >
> > So for what you want just do:
> > STRING="a.txt b.txt c.txt"
> > ${STRING:-b.txt}
>
> That doesn't work.  This does:

Yeah, I don't know why someone would ever think that
STRING="a.txt b.txt c.txt"
made STRING empty or undefined. Or why substituting in the value "b.txt" 
would give the desired "a.txt c.txt".

(Hi Zac! :P)

> $ STRING="a.txt b.txt c.txt"
> $ REMOVE="b.txt"
> $ echo ${STRING/$REMOVE/}
> a.txt c.txt

However, it actually leave an extra space in the variable, which got 
swallowed by your shell since you didn't quote the expansion. Following 
the above with:
$ echo "${STRING/$REMOVE/}"
a.txt  c.txt

You might try either including the leading or trailing space in REMOVE or 
running the string through shell expansion (as you did by calling echo 
without quoting the expansion)

The original poster might want to look into bash arrays, esp. since the 
${VARIABLE/MATCH/REPLACEMENT} expansion doesn't work in sh either (so we 
are already into bash-specific shell), AFAIK.  

-- 
"If there's one thing we've established over the years,
it's that the vast majority of our users don't have the slightest
clue what's best for them in terms of package stability."
-- Gentoo Developer Ciaran McCreesh

Attachment: pgpMlq52k7weG.pgp
Description: PGP signature

Reply via email to