Re: Different history expansion behaivor: true `# # !xxx` vs. true `# !xxx`

2020-03-03 Thread Chet Ramey
On 3/2/20 9:04 PM, Clark Wang via Bug reports for the GNU Bourne Again
SHell wrote:
> This is from stackoverflow ( https://stackoverflow.com/questions/60166019/ ) 
> and it looks like a bug:
> 
> $ bash --version
> GNU bash, version 5.0.7(3)-release (x86_64-pc-linux-gnu)
> Copyright (C) 2019 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later 


> This is free software; you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> $
> $ set -H
> $ true `# !xxx`
> bash: !xxx`: event not found

Well, the history comment character (#) is not found at the start of a
word, so the rest of the line is processed for history expansion.

> $ true `# # !xxx`

The history comment character is found at the start of a word and history
expansion skips the rest of the line.

Readline history expansion knows very little about shell syntax; in
particular, it doesn't know backquotes. It never has.

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/



Re: Different history expansion behaivor: true `# # !xxx` vs. true `# !xxx`

2020-03-03 Thread Eli Schwartz
On 3/3/20 2:27 PM, Chet Ramey wrote:
> On 3/2/20 9:04 PM, Clark Wang via Bug reports for the GNU Bourne Again
> SHell wrote:
>> This is from stackoverflow ( https://stackoverflow.com/questions/60166019/ ) 
>> and it looks like a bug:
>>
>> $ bash --version
>> GNU bash, version 5.0.7(3)-release (x86_64-pc-linux-gnu)
>> Copyright (C) 2019 Free Software Foundation, Inc.
>> License GPLv3+: GNU GPL version 3 or later 
> 
> 
>> This is free software; you are free to change and redistribute it.
>> There is NO WARRANTY, to the extent permitted by law.
>> $
>> $ set -H
>> $ true `# !xxx`
>> bash: !xxx`: event not found
> 
> Well, the history comment character (#) is not found at the start of a
> word, so the rest of the line is processed for history expansion.
> 
>> $ true `# # !xxx`
> 
> The history comment character is found at the start of a word and history
> expansion skips the rest of the line.
> 
> Readline history expansion knows very little about shell syntax; in
> particular, it doesn't know backquotes. It never has.

And the quick test to show that this is the case...

$ set -H
$ true `# !xxx`
bash: !xxx`: event not found
$ true ` # !xxx`
$ true `# !!`
true `# true ` # !xxx``
$


-- 
Eli Schwartz
Arch Linux Bug Wrangler and Trusted User



signature.asc
Description: OpenPGP digital signature