为什么这个命令会给出这样的输出:
$ echo !#
echo echo
echo
$
我读到了有关“!”的内容,它如何根据上下文否定或扩展历史。我只是不明白为什么它与 # 连接时会这样。
答案1
当你执行时,echo !#
你实质上说的是“bash 你可以替换 !# 当前所在的整个命令行吗?(不包括 !# 本身)”
然后,Bash 会将替换的结果打印到 stderr,这就是您所看到的,然后下一行输出只是stdout 中的echo echo
运行结果。echo echo
echo
这在事件指示符部分中有详细说明bash 的联机帮助页。
或多或少!#
只是一个特殊的事件指示符,用于重复命令行
一个更清楚的例子;
echo "There's two of us!";!#
结果是:
echo "There's two of us!";echo "There's two of us!";
There's two of us!
There's two of us!