Bash:访问传递给最后一个命令的参数

Bash:访问传递给最后一个命令的参数

我经常遇到这样的情况:

mkdir /Some/really/long/path/to/a/directory/
cd /Some/really/long/path/to/a/directory/

我知道理想情况下你会cd /Some/...etc.../a/然后然后mkdir directory,但我经常mkdir先执行,然后必须执行cd到我刚刚创建的同一个冗长文件路径的末尾。

缺少做...

var="/Some/...etc.../a/"
mkdir $var/directory; cd $var

...更糟糕的是,是否有某种方法可以重用传递给的参数以前的命令?我当然知道制表符完成,但在一系列具有相似名称的嵌套目录中,这并不总是有那么大的帮助。理想情况下,我希望有一个像$#或 那样的快捷方式$@

如果做不到这一点,下一个最佳的节省时间的解决方案将同样受到赞赏!

答案1

之前的答案建议您使用$_!$。虽然这有效,但我发现它非常危险,因为它们没有展开,并且在按 Enter 并执行命令之前您无法看到它们的值。想象一下rm $_在不确定要删除什么的情况下使用它!

如果您使用的是 bash(可能使用 readlines 的 emacs 模式,这是默认模式),我建议您按ESC,释放它,然后按.

此快捷方式会调用上次执行的命令中的最后一个参数。所以写作cd <ESC> <.>会给你带来很长的路径/文件。

热键ALT+ .(同时按下)的工作方式相同。

如果您使用的是 bash vi 模式而不是默认的 emacs 模式,则可以使用ALT+来模拟此行为.(如果您~\.inputrc使用以下命令更改文件):

set keymap vi-insert

$if mode=vi
    "\e.": yank-last-arg
$endif

答案2

在 bash(以及其他一些 shell,如 zsh)中,您可以使用$_,它包含上一个命令的最后一个参数:

mkdir /path/to/file
cd "$_"

答案3

交互工作时,您可以使用历史扩展来实现此目的:

mkdir /Some/really/long/path/to/a/directory/
cd !$

有很多变体,允许您访问上一个命令或历史记录中任何其他命令的其他参数。看Bash,插入当前命令最后使用的参数欲了解详情...

相关内容