Hacker News new | ask | show | jobs
by benjaminwai 1691 days ago
I think !$ takes the last argument on the previous command in history, not previous one on the same line.. at least in bash. For example, if you do:

  $ ls /
  $ ls /tmp/junk; rm !$
It's taking "/" rather than "/tmp/junk"..

EDIT: formatting

1 comments

Yes that's right it's the previous command from history. That way you run ls and see if it's the expected output, then rm to delete.
Point being that "ls /path; rm $!" deletes something entirely different than "/path".

What you want is "ls /path; rm $_".

Even then, the above is fairly pointless. At the time you look at what you are deleting, it's gone.

I think you misunderstood the previous comment. I think that firstly "ls /path" is entered and if the result is ok, then "; rm $_" is added to the copy of the command then executed.
Yes, at which point you simply do:

1. ls /path

2. rm <esc><.>

(where "escape" "dot" brings up last argument) without the need to fiddle around with dollar signs underscores, exclamation marks, etc. to prevent further mistakes (e.g. "was it $! or !$ ?", shell expansion, etc)