Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > gnu.bash.bug > #15493
| Path | csiph.com!goblin1!goblin.stu.neva.ru!usenet.stanford.edu!not-for-mail |
|---|---|
| From | Jim Monte <jim.monte01@gmail.com> |
| Newsgroups | gnu.bash.bug |
| Subject | Re: Issues with history substitution and its documentation |
| Date | Thu, 10 Oct 2019 22:35:26 -0400 |
| Lines | 308 |
| Approved | bug-bash@gnu.org |
| Message-ID | <mailman.257.1570761346.9715.bug-bash@gnu.org> (permalink) |
| References | <CA+VKLw-WX8zUz06MZ9ThuMhUuW97aJ5ted8oSfJSvrVJBLW3hA@mail.gmail.com> <CA+VKLw_XMx1xjiFt-Tio8S+Mdt_AeS9v64SuMYYMdDdDnJFSBQ@mail.gmail.com> |
| NNTP-Posting-Host | lists.gnu.org |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset="UTF-8" |
| X-Trace | usenet.stanford.edu 1570761347 14354 209.51.188.17 (11 Oct 2019 02:35:47 GMT) |
| X-Complaints-To | action@cs.stanford.edu |
| To | bug-bash@gnu.org |
| Envelope-to | bug-bash@gnu.org |
| DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=2la8CM8b8wQOlL/G/8YPud1YYuhYs42A61JHXzK86Zs=; b=Nv7eP7z+3Xg9DuGiNcbkg+pOCUeCe0ClHFZXNRlpjs4yIT4o1jXuafpZnFNYMQlPYM HcllRayaLNW6OuGVKp14GBL6Pf7ON+vA6Gkt7nVOzsrF/Hi3Z97pg/hSZwBDZV7sbcan MmoBXLkIE1BVF+r5FdyGzFhU+F+wpwwvAWZl4s5PbDZNYdVK7FvkA4YHeXWUa36bjTT9 BcSVEf0auvPSFRhMLCX4GU57BsZyEDlNcuzAEXneFCtsxjpXK4BwCUZsjUoh6oADKRmk SIbM/eyBfdeYEXKXMn3URn6g2Y3OsFqYcx7x2rtdvhS99IdeshkQPcPIXdzvn9k1on4i lazA== |
| X-Google-DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=2la8CM8b8wQOlL/G/8YPud1YYuhYs42A61JHXzK86Zs=; b=svFMR7VlHhml7M/fjmC4c1ubpGVgpRGXir1jrwKlqKGNf18AntBzAI2OCKmPo814q7 etNNRb1n0kRzkUnGA6Z9nm+yX75KDV5EG0Wf76xtmU8WO7ebiCHlypMv0+UNo3J1XnFl HBcLiUNtTRmVzTtfrrWIpPemzTRWKbgC6y2j7K+7w8paINuNuPd8HSp9/6q7BCGDfxDl ODw+ZiSCfKAiH2ywrudrcFqXlZx0nBEZkTpiRwlJ3nKXcW2ebJH2X/tpdOT6JKgToH4Z 0DuBZM765pzbGA5eCAEY2uKSkWLgPmWy2NDd8Y4I79/aH5/rWHzjzHf1ywuTl2umb8a8 Pa1Q== |
| X-Gm-Message-State | APjAAAUeB5PAtuGGqyE4BxP8FmU7m2qKTLVddiSs+TgmJOUpHJu23oQp WyZb/36769ZeyT83eDqHO56qrWNcff/LGduEyEQGNOvS |
| X-Google-Smtp-Source | APXvYqxQzVBUtf1dHGdLa3NE4g3NBTKO029BHC3X1cXkC+UUcvsNijACEXP82HUN5nw7DbnSUHac9TRjrP1OTyaMpSA= |
| X-Received | by 2002:a05:6638:695:: with SMTP id i21mr7519769jab.122.1570761337676; Thu, 10 Oct 2019 19:35:37 -0700 (PDT) |
| In-Reply-To | <CA+VKLw-WX8zUz06MZ9ThuMhUuW97aJ5ted8oSfJSvrVJBLW3hA@mail.gmail.com> |
| X-detected-operating-system | by eggs.gnu.org: Genre and OS details not recognized. |
| X-Received-From | 2607:f8b0:4864:20::d29 |
| X-Content-Filtered-By | Mailman/MimeDel 2.1.23 |
| X-BeenThere | bug-bash@gnu.org |
| X-Mailman-Version | 2.1.23 |
| Precedence | list |
| List-Id | Bug reports for the GNU Bourne Again SHell <bug-bash.gnu.org> |
| List-Unsubscribe | <https://lists.gnu.org/mailman/options/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=unsubscribe> |
| List-Archive | <https://lists.gnu.org/archive/html/bug-bash> |
| List-Post | <mailto:bug-bash@gnu.org> |
| List-Help | <mailto:bug-bash-request@gnu.org?subject=help> |
| List-Subscribe | <https://lists.gnu.org/mailman/listinfo/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=subscribe> |
| X-Mailman-Original-Message-ID | <CA+VKLw_XMx1xjiFt-Tio8S+Mdt_AeS9v64SuMYYMdDdDnJFSBQ@mail.gmail.com> |
| X-Mailman-Original-References | <CA+VKLw-WX8zUz06MZ9ThuMhUuW97aJ5ted8oSfJSvrVJBLW3hA@mail.gmail.com> |
| Xref | csiph.com gnu.bash.bug:15493 |
Show key headers only | View raw
Hi,
This bug report has been my first one for Bash. I have not found how to
check the status of the bug. Would you please provide this information?
Below are a couple more issues I found.
There is an inconsistency with the documentation and behavior of the ^ word
designator. According to documentation, it refers to the first argument but
does not require a ':' before it if it starts the word designator. However,
it does not act like the numerical word designator 1 at the end of a range.
[root@localhost ~]# echo a b c
a b c
[root@localhost ~]# echo !!:1-1
echo a
a
[root@localhost ~]# echo a b c
a b c
[root@localhost ~]# echo !!:^-^
echo a b^
a b^
Also it is not explicitly documented that :- is equivalent to :0-
[root@localhost ~]# echo a b c d
a b c d
[root@localhost ~]# echo !!:-
echo echo a b c
echo a b c
[root@localhost ~]# echo a b c d
a b c d
[root@localhost ~]# echo !!:0-
echo echo a b c
echo a b c
Jim Monte
On Thu, Oct 3, 2019 at 6:19 PM Jim Monte <jim.monte01@gmail.com> wrote:
> Hi All,
>
> Below are some issues I found with history substitution. I am duplicating
> its behavior in a somewhat different use, and found issues with the
> documentation and bugs as described.
>
> Jim Monte
>
>
>
>
> From: jim
> To: bug-bash@gnu.org
> Subject: Issues with history substitution and its documentation
>
> Configuration Information [Automatically generated, do not change]:
> Machine: x86_64
> OS: linux-gnu
> Compiler: gcc
> Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
> -DCONF_OSTYPE='l$
> uname output: Linux T5500-Ubuntu 4.18.0-22-generic #23~18.04.1-Ubuntu SMP
> Thu J$
> Machine Type: x86_64-pc-linux-gnu
>
> Bash Version: 4.4
> Patch Level: 19
> Release Status: release
>
> Description:
>
> =============================================================================
> Documentation of quick substitution is incorrect (or does not match
> behavior).
>
> I believe this issue is an error with the documentation of history
> "Quick Substitution" that has existed since the first snapshot available at
> web.archive.org in 2007 at
>
>
> https://web.archive.org/web/20071223174140/http://www.gnu.org/software/bash/manual/html_node/Event-Designators.html
>
> At the least it is true that bash does not behave as the documentation
> states,
> but it does act in a way that is more reasonable (to me) than what is
> written.
>
> The documentation states that ^string1^string2^ is equivalent to
> !!:s/string1/string2/. However, bash treats it as equivalent to
> !!:s^string1^string2^.
>
> jim@T5500-Ubuntu:~$ echo /a
> /a
> jim@T5500-Ubuntu:~$ ^/a^b^
> echo b
> b
> jim@T5500-Ubuntu:~$ echo /a
> /a
> jim@T5500-Ubuntu:~$ !!:s//a/b/
> echo ab/
> ab/
> jim@T5500-Ubuntu:~$ echo /a
> /a
> jim@T5500-Ubuntu:~$ !!:s^/a^b^
> echo b
> b
>
>
> =============================================================================
> Behavior of empty "old" string in a substitution is undefined.
>
> The earlier example also shows a related but different issue with the
> !!:s//a/b/ command, where the string to locate is empty.
> It causes /a to be replaced by a and the b/ is appended.
>
> But
> jim@T5500-Ubuntu:~$ echo ///a
> ///a
> jim@T5500-Ubuntu:~$ !!:s//z/
> echo //z
> //z
>
> Here the empty string caused /a to be replaced by z.
>
> However,
> jim@T5500-Ubuntu:~$ echo ///abcdefg
> ///abcdefg
> jim@T5500-Ubuntu:~$ !!:s//z/
> echo //zbcdefg
> //zbcdefg
>
> Here a slash and the first character of the second word are replaced by z.
>
>
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:s//z/
> echo z b c
> z b c
>
>
> jim@T5500-Ubuntu:~$ echo ///
> ///
> jim@T5500-Ubuntu:~$ !!:s//z/
> bash: :s//z/: substitution failed
>
> Using :gs instead of :s does not change the results.
>
>
> =============================================================================
> BUG
> If an event designator has a leading - character, it is ignored.
>
> jim@T5500-Ubuntu:~/tmp$ cat main.c
> #include <stdio.h>
> int main(void)
> {
> (void) fprintf(stdout, "Hello, world!\n");
> return 0;
> }
>
> jim@T5500-Ubuntu:~/tmp$ gcc main.c -o"-a"
> jim@T5500-Ubuntu:~/tmp$ gcc main.c -o"-b"
> jim@T5500-Ubuntu:~/tmp$ -a
> Hello, world!
> jim@T5500-Ubuntu:~/tmp$ !-a:s/a/b
> bpt-cache abc
>
>
>
> =============================================================================
> Documentation of the :h and :t modifiers in section 9.3.3 is incomplete.
> :h removes the last / and everything after it if a / is present. Otherwise
> it does nothing.
>
> :t removes everything before and including the last / if one is present.
> Otherwise it does nothing.
>
> If a slash is present, !!:h/!!:t is equivalent to !!.
>
> jim@T5500-Ubuntu:~$ echo /a/b/c/d
> /a/b/c/d
> jim@T5500-Ubuntu:~$ !!:h
> echo /a/b/c
> /a/b/c
> jim@T5500-Ubuntu:~$ echo /a/b/c/d
> /a/b/c/d
> jim@T5500-Ubuntu:~$ !!:h:h
> echo /a/b
> /a/b
> jim@T5500-Ubuntu:~$ echo /a/b/c/d
> /a/b/c/d
> jim@T5500-Ubuntu:~$ !!:h:h:h
> echo /a
> /a
> jim@T5500-Ubuntu:~$ echo /a/b/c/d
> /a/b/c/d
> jim@T5500-Ubuntu:~$ !!:h:h:h:h
> echo
>
> jim@T5500-Ubuntu:~$
> jim@T5500-Ubuntu:~$ echo /a/b/c/d
> /a/b/c/d
> jim@T5500-Ubuntu:~$ !!:t
> d
> d: command not found
>
>
> jim@T5500-Ubuntu:~$ echo a/b
> a/b
> jim@T5500-Ubuntu:~$ !!:h/!!:t
> echo a/b
> a/b
> jim@T5500-Ubuntu:~$ echo a/b
> a/b
> jim@T5500-Ubuntu:~$ !!
> echo a/b
> a/b
>
>
>
> =============================================================================
> Documentation of the :r and :e modifiers is incomplete.
> :r removes the last ".suffix" and everything after it, if a ".suffix" is
> present. Otherwise it does nothing.
> :e leaves the last ".suffix" and everything after it, if a ".suffix" is
> present. Otherwise it does nothing.
>
> jim@T5500-Ubuntu:~$ echo .suffix a b .suffix c d
> .suffix a b .suffix c d
> jim@T5500-Ubuntu:~$ !!:r
> echo .suffix a b
> .suffix a b
> jim@T5500-Ubuntu:~$ echo .suffix a b .suffix c d
> .suffix a b .suffix c d
> jim@T5500-Ubuntu:~$ !!:r:r
> echo
>
> jim@T5500-Ubuntu:~$ echo .suffix a b .suffix c d
> .suffix a b .suffix c d
> jim@T5500-Ubuntu:~$ !!:e
> .suffix c d
>
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:r
> echo a b c
> a b c
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:e
> echo a b c
> a b c
>
>
> =============================================================================
> BUG
> :p does not suppress execution if it is duplicated.
>
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:p
> echo a b c
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:p:p
> echo a b c
> a b c
>
>
> =============================================================================
> Documentation of :q and :x is incomplete.
> If :q and :x are repeated, the last specification is taken.
>
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:q
> 'echo a b c'
> echo a b c: command not found
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:x
> 'echo' 'a' 'b' 'c'
> a b c
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:q:x
> 'echo' 'a' 'b' 'c'
> a b c
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:q:x:q
> 'echo a b c'
> echo a b c: command not found
> jim@T5500-Ubuntu:~$ echo a b c
> a b c
> jim@T5500-Ubuntu:~$ !!:q:x:q:x
> 'echo' 'a' 'b' 'c'
> a b c
>
>
> =============================================================================
> Finally, documentation of G should mention that it can be used with both
> :s and &.
>
>
>
Back to gnu.bash.bug | Previous | Next | Find similar | Unroll thread
Re: Issues with history substitution and its documentation Jim Monte <jim.monte01@gmail.com> - 2019-10-10 22:35 -0400
csiph-web