我不是在谈论 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 事件指示符旨在与单词指示符和修饰符(位于手册页中事件指示符的正下方)。当将命令与管道、;
或 &
/&&
例如:
我可以使用替换修饰符针对两个输入 bar
和 baz
运行脚本 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/