bash - bash中 `!#`有什么用?

标签 bash shell

我不是在谈论 UNIX shebang旨在提供解释器的路径。事实上,shebang 使得成功地用谷歌搜索这个问题变得相当困难......

我说的是 bash 扩展:

  • !! 检索紧接在前的命令(类似于向上箭头,但更有用)
  • !$ 检索最后一个命令的最后一个词
  • !# 出现检索当前行

但是!# 的实际用途是什么?

  • echo !# 扩展为 echo echo
  • echo echo !# 扩展为 echo echo echo echo
  • ls !# 扩展为 ls ls

所有这些似乎都毫无意义。我对 !# 命令的所有了解都是我从使用它中学到的——我不确定我是否知道它的真正功能。

最佳答案

如对问题和其他答案的评论所述,您可以轻松找到 man bash 的部分:

!#     The entire command line typed so far.

手册页或其他文档没有明确说明并且可能导致您对 !# 的有用用途感到困惑的是 bash 事件指示符旨在与单词指示符和修饰符(位于手册页中事件指示符的正下方)。当将命令与管道、;&/&&

链接在一起时,用例也更有意义

例如:

我可以使用替换修饰符针对两个输入 barbaz 运行脚本 foo.sh:

$ ./foo.sh bar; !#:s/bar/baz/

扩展为:

./foo.sh bar; ./foo.sh baz;

或者下面转载的文档 (R.I.P. Docs) 中的示例显示了如何使用单词选择器 :N 来选择到目前为止输入的命令的第一个参数,并整齐地 cd 到刚刚创建的目录:

$ mkdir backup_download_directory && cd !#:1
mkdir backup_download_directory && cd backup_download_directory

这些示例非常简单,但我希望它们展示了 !# 如何在制作强大的单行代码的同时真正为某人节省一些严重的冗余输入。

关于bash - bash中 `!#`有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45720373/

相关文章:

shell - 如何在 CSH 中取消引用变量

linux - 如何通过 SSH 将 Sudo 与 Jenkins bash 脚本一起使用?

bash - 如何删除已完成的 kubernetes pod?

linux - 无法从包含句点的参数中获取 "touch"文件

angular - 在用 Electron 打包的 Angular 应用程序中运行 shell 脚本

bash - 在 "for"循环 bash 中解析多个 awk 变量

linux - M-^ 是什么意思? in stty 输出是什么意思?

bash - 如何在当前 shell 中执行命令的输出?

postgresql - 如何在 Ubuntu 16 的 shell 脚本中使用 postgres 用户

bash - 从 shell 脚本中的后台函数中获取 PID