[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#20006: Bash-specific performance by avoiding sed
From: |
Pavel Raiskup |
Subject: |
bug#20006: Bash-specific performance by avoiding sed |
Date: |
Mon, 05 Oct 2015 09:47:05 +0200 |
User-agent: |
KMail/4.14.10 (Linux/4.2.1-300.fc23.x86_64+debug; KDE/4.14.11; x86_64; ; ) |
On Monday 05 of October 2015 01:25:24 Pavel Raiskup wrote:
> On Monday 05 of October 2015 00:45:50 Pavel Raiskup wrote:
> > > should we test the size of the string first ? i've written such raw
> > > shell
> > > string parsing functions before, and once you hit a certain size (like
> > > 1k+
> > > iirc), forking out to sed is way faster, especially when running in
> > > multibyte
> > > locales (like UTF8) which most people are doing nowadays.
> > > -mike
> >
> > Well, that optimization would require (fast) strlen()-like construct.
> > Anyway, the vast majority of calls to func_quote () function will have
> > short ARG, and its complexity is still "just" linear. We could optimize
> > later if that was a real issue.
> >
> > I would like to propose solution based on Eric's one, without using of
> > '${VAR%.}' and '${VAR#.}' constructs -- sounds like this could be even
> > more portable while it keeps almost the same speed (if we can use += its
> > even faster).
> >
> > I have yet a another patch trying to minimize option-parser overhead
> > (that is focused on the POV of Richard, but that needs to be cleaned up a
> > bit, I'll post hopefully tomorrow).
> >
> > Any comment is welcome!
>
> Re-attached (fixes for 'make syntax-check' and fixed one comment).
Hmm, one might-be-a-problem with this (catched by testsuite), when you
have:
$ cat build-aux/test-quoting
. `echo "$0" |${SED-sed} 's|[^/]*$||'`/funclib.sh
# source this for "GNU m4" detection methods
. `echo "$0" |${SED-sed} 's|[^/]*$||'`/extract-trace
func_quote_for_eval "$@"
echo "$func_quote_for_eval_result"
Then:
$ ./build-aux/test-quoting '"a b"' # fine
"\"a b\""
$ ./build-aux/test-quoting '"*tool"' # broken
./build-aux/test-quoting '"*tool"'
\"libtool\"
We would like to have an output \"*\". I'm not aware of portable way
how to disable wildcard expansion in shell, and autoconf 'Shellology'
section haven't helped me. In particular, the problem is here:
x='a"[a-z]*"c'
IFS='"'
for i in $x; do # Here we wan't to disable wildcard expansion
echo $i
done
Any idea other than fallback to $sed_quote_subst in case of '*' or '['
exists in ARG?
Pavel
- bug#20006: Bash-specific performance by avoiding sed, Pavel Raiskup, 2015/10/08
- bug#20006: Bash-specific performance by avoiding sed, Pavel Raiskup, 2015/10/08
- bug#20006: Bash-specific performance by avoiding sed,
Pavel Raiskup <=
- bug#20006: Bash-specific performance by avoiding sed, Pavel Raiskup, 2015/10/08
- bug#20006: Bash-specific performance by avoiding sed, Pavel Raiskup, 2015/10/08
- bug#20006: Bash-specific performance by avoiding sed, Eric Blake, 2015/10/08
- bug#20006: Bash-specific performance by avoiding sed, Pavel Raiskup, 2015/10/10
- bug#20006: Bash-specific performance by avoiding sed, Pavel Raiskup, 2015/10/12
- bug#20006: Bash-specific performance by avoiding sed, Eric Blake, 2015/10/08