我怎么能回想起前一个bash命令的参数?

The*_*der 285 unix linux bash command

Bash有没有办法回忆起前一个命令的论点?

我通常会vi file.c跟着gcc file.c.

Bash有没有办法回忆起前一个命令的论点?

cod*_*ict 520

您可以使用$_!$调用上一个命令的最后一个参数.

Alt + .可用于调用任何先前命令的最后一个参数.

  • 另外,如果你想要一个任意的参数,你可以使用`!!:1`,`!!:2`等(`!!:0`是前一​​个命令本身.)见http://www.gnu .ORG /软件/庆典/手动/ bashref.html#历史互动 (110认同)
  • 类似于`!$`,你使用`!^`作为第一个参数. (37认同)
  • 啊...*nix ...你是一个美丽的东西......每天我都爱你 (10认同)
  • “ Alt +。”在vi模式下不起作用。仅供参考,对于在此感到困惑的其他人。 (3认同)
  • 请注意,`!$` 在运行时会在第一行打印完整的命令,而 `$_` 不会。 (2认同)
  • @young_souvlaki 参见“man bash”,实际上所有内容都在其中,你只需要实际阅读它(这是困难的部分,但请特别查看“历史扩展”和“操纵历史的命令”。对于 GNU readline相关的东西(这是bash之外最关键的绑定相关的东西):https://tiswww.cwru.edu/php/chet/readline/rltop.html#TOCDocumentation (2认同)
  • 它在 Mac 上如何工作?我使用 mac + iterm2,按 Alt + 。只显示“≥” (2认同)

Rob*_*and 150

如果前一个命令有两个参数,就像这样

ls a.txt b.txt
Run Code Online (Sandbox Code Playgroud)

你想要第一个,你可以输入

!:1
Run Code Online (Sandbox Code Playgroud)

a.txt
Run Code Online (Sandbox Code Playgroud)

或者如果你想要两者,你可以输入

!:1-2
Run Code Online (Sandbox Code Playgroud)

a.txt b.txt
Run Code Online (Sandbox Code Playgroud)

您可以将其扩展为任意数量的参数,例如:

!:10-12
Run Code Online (Sandbox Code Playgroud)

  • 如果前一行中没有两个参数,我会得到同样的结果.例如.第1行`ls a.txt`第2行`ll!:1-2` (2认同)

Joh*_*ron 79

!!:nn你想要的参数从0开始的位置在哪里.

例如:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"
Run Code Online (Sandbox Code Playgroud)

!前缀用于访问以前的命令.

其他有用的命令:

  • !$ - 上一个命令的最后一个参数
  • !^ - 来自上一个命令的第一个参数(在程序/内置/脚本之后)
  • !! - 上一个命令(通常发音为"bang bang")
  • !n- 命令编号n来自history
  • !pattern - 最近的命令匹配 pattern
  • !!:s/find/replace- 最后一个命令,替换findreplace

有关命令历史的更多信息

  • 而不是`!!:s/find/replace`,你也可以`^ find ^ replace`. (5认同)
  • 另外:`!*` - 上一个命令的所有参数(在程序/内置/脚本之后)。例如:`ls *.tmp *.cache rm !*` (4认同)

Ant*_*ano 64

在命令行中,您可以按esc- .alt+.

它循环使用您之前使用的参数.

  • @Bucket 键通过先前的命令,而 Antonio 提供的解决方案允许通过先前的参数(仅每个先前命令的最后一个参数) (4认同)

小智 29

如果您知道特定命令的历史记录中给出的数字,则可以使用以下术语在该命令中使用任何参数.

使用以下命令从历史记录中的第三个命令获取第二个参数,

!3:2

使用以下命令从历史记录中的第五个最后一个命令获取第三个参数,

!-5:3

使用减号,您要求它从历史记录的最后一个命令遍历.


小智 17

!*运行一个包含所有先前参数的新命令.

ls /tmp
cd !*
#you are now in /tmp
Run Code Online (Sandbox Code Playgroud)

  • 这在 OSX 上对我不起作用 - 必须使用 `$_` 来代替。 (2认同)

Jus*_*ier 16

是的,您可以使用它!$来调用前一个命令的最后一个参数.

  • 请注意关键字“last”,尤其是当您的命令包含多个参数时。 (2认同)