On 9/6/20 4:18 PM, L A Walsh wrote: > history 3 > 2983 echo "this is on what history line? ($HISTCMD)" > 2984 echo $(($HISTCMD-2)) > 2985 history 3 > > Seems to only give correct line from history by subtracting 2? > Maybe its different in 5.x?
When readline stores history entries, it stores them in an array starting from 0, and it increments the history number after storing an entry so it's an accurate count of the number of entries in the list. That means the history number has to be offset somehow if it's already been stored and the number of entries has been incremented. When bash implements command-oriented history, it has to manage using the same history entry as the first line of the command, after the history library has already incremented the history number. The same thing happens when it implements literal history. There are two cases to consider: the expansion is being performed as part of PS1 or another prompt expansion, in which case the shell should use the current history number (unless the line is part of a multi-line command), or whether it's being expanded as part of command execution, in which case the history entry has already been stored and the history number has to be offset. I made several changes in early 2017 based on https://lists.gnu.org/archive/html/bug-bash/2017-03/msg00081.html and bash-5.1 will have additional changes for $HISTCMD. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://tiswww.cwru.edu/~chet/