2

In bash, history -p does history expansion on its argument; What is the alternative in zsh?

HappyFace
  • 1,493
  • 9
  • 21

2 Answers2

3

I'm not aware of any, but see the histverify option which changes the behaviour of history expansion so that when you press enter on a line that contains history operators, the expansion is performed in the editor buffer without running the command.

$ setopt histverify
$ echo !!Enter
$ echo setopt histverifyEnter
setopt histverify

Also note that in zsh like in csh (where history expansion comes from in the late 70s) history modifiers (like :h, :r, :A...) can also be applied to parameter expansions ($var:h...).

And the whole history is accessible with the $history special associative array.

Keys of that associative arrays are the history numbers, and contrary to regular associative arrays where the order is undefined, $history[@] is sorted in descending order on the numerical value of the key.

So ${history:0:1} is the last history entry. So, you can use parameter expansion operators to get the same result as with history expansion operators. For instance: !$:h, could be ${${(z)history:0:1}[-1]:h}

Stéphane Chazelas
  • 522,931
  • 91
  • 1,010
  • 1,501
0

In bash you can expand a command by doing this:

history -p !23 

So if in 23 you have ls -l the, return will be:

ls 
-l 

In zsh i am able to reproduce a similar (but not identical) behavior by doing this:

history 23 23 | xargs -n1 | tail -n+2
Rui F Ribeiro
  • 55,929
  • 26
  • 146
  • 227
Luciano Andress Martini
  • 6,490
  • 4
  • 26
  • 56
  • 1
    ITYM `history -p '!23'`. In `zsh`, just use `print -r -- $history[23]` – Stéphane Chazelas Sep 03 '18 at 15:02
  • I tried but nothing happens =(. Try history -p !23 instead of history -p '!23'... for what is really that ? =( – Luciano Andress Martini Sep 03 '18 at 15:04
  • Thanks, but I need more sophisticated behavior; I wanted to run `history -p '^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}'`. I wrote that function using `fc` in the end. – HappyFace Sep 04 '18 at 17:49
  • I cant imagine the results you want to got. I just received "History Expansion Failed" (in bash). Can you post in you question what you have, and what exactly you want to get or do? Thank you. Maybe i have a easy solution! – Luciano Andress Martini Sep 04 '18 at 17:54