Bash substrings – just can’t figure it out…

Jonathan Hudson jh+ubuntu at
Tue Jan 31 19:13:06 UTC 2012

On Tue, 31 Jan 2012 19:55:24 +0100, Johnny Rosenberg wrote:

>2012/1/31 Jonathan Hudson <jh+ubuntu at>:
>> On Tue, 31 Jan 2012 12:31:06 -0600, Cybe R. Wizard wrote:
>>>On Tue, 31 Jan 2012 19:07:20 +0100
>>>Johnny Rosenberg <gurus.knugum at> wrote:
>>>> I have an example here:
>>>> File="03. Rock Nuts.flac"
>>>> echo "${File##N*s}"
>>>> The result should be ”03. Rock .flac”, shouldn't it? Obviously not,
>>>> because the result is ”03. Rock Nuts.flac”, which is exactly the
>>>> original string.
>>>> So what am I missing?
>> That it's a string substitution, not a glob or wildcard match.
>What's a ”glob”? English is not my native language, sorry. I try the
>best I can though.
>> Try
>> $ echo ${File//N*s}
>That worked, but somehow I still don't understand exactly why my
>example didn't… *confused*
First ## is a glob (pattern match), apologies. The reason why your ##
doesn't work is because (a) it is the prefix match, not a suffix match
and (b) it tries to match the whole remainder of the string (which ends
in 'c', not 's), whilst // is a replacement. 

$ echo ${File%%N*c}

illustrates the suffix (end bit) match.


$ echo ${File##03. }

shows the prefix match.


More information about the ubuntu-users mailing list