在下面的Bash命令中,
!#:* !#:1
的含义是什么?echo "This is a sentence." !#:* !#:1- >text3
!#:* !#:1
的含义是什么?echo "This is a sentence." !#:* !#:1- >text3
它使用bash的历史替换机制。
具体来说,!#
指代当前行(但不包括 !#
本身所在的位置)。!#:*
是该行命令名后面的部分(因此,在本例中,是 "This is a sentence."
)。!#:1-
与 !#:*
相同,只是省略了最后一个单词(因此,它不包括我们刚刚通过 !#:*
添加的第二个 "This is a sentence"
副本)。
最终结果是将三个 This is a sentence.
的副本回显到名为 text3
的文件中。
来自的输出:
echo "hello" !#
相当于以下输出结果:
echo "hello" echo "hello"
which is:
hello echo hello
!#
意味着将之前的字符串再次替换到当前行(快捷方式,避免重复编写)
0th 1st 2nd 3rd
-------- ------- ------ --------
echo "hello" echo "hello"
-------- ------- ------ -------
!#:0
表示替换第0列的值
!#:1
表示替换第1列的值
例如
echo "hello" !#:1
这个输出结果与以下代码的输出结果相同:
echo "hello" "hello"
which is:
hello hello
!#:1
将被第一列中的字符串"hello"
替换
echo "hello" !#:0
生成的输出与以下内容相同:
echo "hello" echo
which is:
hello echo
!#:0
会被0列中的字符串替换 — echo
:*
的意思是“从第0列开始的所有内容(从第1列开始)”,而 :1-
的意思是“从第1列开始但不包括最后一列的所有内容”。 - Mark Reed