【问题标题】:How can I recall the argument of the previous bash command?我怎样才能回忆起上一个 bash 命令的参数?
【发布时间】:2011-03-23 05:26:47
【问题描述】:

在 Bash 中有没有办法调用上一个命令的参数?

我通常使用vi file.c,然后是gcc file.c

在 Bash 中有没有办法调用上一个命令的参数?

【问题讨论】:

标签: linux bash unix command


【解决方案1】:

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

还可以使用Alt + . 调用任何先前命令的最后一个参数。

【讨论】:

  • 另外,如果你想要一个任意的参数,你可以使用!!:1!!:2等(!!:0是前面的命令本身。)见gnu.org/software/bash/manual/bashref.html#History-Interaction
  • 类似于!$,第一个参数使用!^
  • 啊……*nix……你是一个美丽的东西……每天我都更爱你
  • Alt + . 在 vi​​ 模式下不起作用。仅供参考,对于在这里感到困惑的其他人。
  • 注意!$在运行时会在第一行打印完整的命令,而$_不会。
【解决方案2】:

如果前面的命令有两个参数,像这样

ls a.txt b.txt

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

!:1

给予

a.txt

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

!:1-2

给予

a.txt b.txt

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

!:10-12

【讨论】:

  • @RNA,我只是再次尝试以确保我没有输入拼写错误,您能否提供更多详细信息(例如 ubuntu 命令行,用于 windows 的 cygwin?错误消息?上一行?)
  • 我正在使用 GNU bash,版本 3.2.51(1)-release (x86_64-apple-darwin13) 版权所有 (C) 2007 Free Software Foundation, Inc. 错误消息是 -bash: :1-2: bad word specifier跨度>
  • 如果上一行没有两个参数,我会得到同样的结果。例如。第 1 行 ls a.txt 第 2 行 ll !:1-2
  • 你是对的。这是我犯的一个愚蠢的错误。谢谢!
  • [叹气]...在工作中分心的好方法 - 喜欢这个
【解决方案3】:

!!:n 其中n 是您想要的参数的从 0 开始的位置。

例如:

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

echo !!:2
# "two"

! 前缀用于访问之前的命令。

其他有用的命令:

  • !$ - 上一个命令的最后一个参数
  • !^ - 前一个命令的第一个参数(在程序/内置/脚本之后)
  • !* - 来自上一个命令的所有参数
  • !! - 上一个命令(通常发音为“bang bang”)
  • !n - 命令号 n 来自 history
  • !pattern - 与 pattern 匹配的最新命令
  • !!:s/find/replace - 最后一个命令,将 find 替换为 replace

More info on command history

【讨论】:

  • 除了!!:s/find/replace,你也可以^find^replace
  • 另外:!* - 来自上一个命令的所有参数(在程序/内置/脚本之后)。例如:ls *.tmp *.cache rm !*
【解决方案4】:

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

循环遍历您之前命令的最后一个参数

【讨论】:

  • 我总是发现 键也可以工作。
  • @Bucket 键通过之前的命令,而 Antonio 提供的解决方案允许通过之前的参数(仅每个之前命令的最后一个参数)
【解决方案5】:

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

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

!3:2

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

!-5:3

使用减号,您要求它从历史的最后一条命令开始遍历。

【讨论】:

  • 由于某种原因,在 MacOS 11.6.1 终端上,zsh 5.8 (x86_64-apple-darwin20.0) 这不起作用。看起来 zsh 忽略了 '-' 符号 - 并且仅从列表的开头获取 n 。该怎么办?咨询哪个“手册”页?
【解决方案6】:

!* 使用所有先前的参数运行一个新命令。

ls /tmp
cd !*
#you are now in /tmp

【讨论】:

  • 这在 OSX 上对我不起作用 - 必须改用 $_
  • 这应该是答案。
【解决方案7】:

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

【讨论】:

  • 注意关键字“last”,尤其是当您的命令包含多个参数时。
猜你喜欢
  • 2018-04-23
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
相关资源
最近更新 更多