[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: man mention case of null word in ${parameter#word}
From: |
Paul Jarc |
Subject: |
Re: man mention case of null word in ${parameter#word} |
Date: |
Fri, 23 Nov 2001 05:09:00 -0500 |
User-agent: |
Gnus/5.090004 (Oort Gnus v0.04) Emacs/20.7 (i386-redhat-linux-gnu) |
Dan Jacobson <jidanni@deadspam.com> wrote:
> In the manual, for
> ${parameter#word}
> etc. it doesn't mention the case of when word is null.
Except in certain documented cases, an unset variable is just like one
set to an empty string, and the empty string case is covered by the
current documentation of this feature. There's no need to also
mention the unset case here.
> Furthermore, for
> $ a=(123 456);echo ${a[@]/#/1}
> 1123 1456
>
> one might have never thought this possible, due to the manual only
> saying:
>
> ${parameter/pattern/string}
>
> ...If string is null, matches of pattern are deleted and
> the / following pattern may be omitted.
No, it says more than that:
${parameter/pattern/string}
${parameter//pattern/string}
The pattern is expanded to produce a pattern just
as in pathname expansion. Parameter is expanded
and the longest match of pattern against its value
is replaced with string. In the first form, only
the first match is replaced. The second form
causes all matches of pattern to be replaced with
string. If pattern begins with #, it must match at
the beginning of the expanded value of parameter.
If pattern begins with %, it must match at the end
of the expanded value of parameter. If string is
null, matches of pattern are deleted and the / folĀ
lowing pattern may be omitted. If parameter is @
or *, the substitution operation is applied to each
positional parameter in turn, and the expansion is
the resultant list. If parameter is an array variĀ
able subscripted with @ or *, the substitution
operation is applied to each member of the array in
turn, and the expansion is the resultant list.
paul