在bash命令中,#:*!#:1-是什么意思?

Ada*_*gro 4 linux bash

在下面的Bash命令中,含义是什么: !#:* !#:1

echo "This is a sentence." !#:* !#:1- >text3
Run Code Online (Sandbox Code Playgroud)

Mar*_*eed 8

它使用了bash的历史替换机制.

具体而言,!#指当前行(直到但不包括其!#自身的位置).!#:*是命令名后面的那一行的一部分(因此,在这种情况下,"This is a sentence."). !#:1-相同,!#:*不同之处在于它忽略了最后一个字(所以它不包括的第二个副本"This is a sentence",我们只是通过附加的!#:*).

最终结果是一行三个副本This is a sentence.回显到一个名为的文件中text3.


Rah*_*R A 5

来自以下内容的输出:

echo "hello" !#        
Run Code Online (Sandbox Code Playgroud)

等效于:

echo "hello" echo "hello"
Run Code Online (Sandbox Code Playgroud)

这是:

hello echo hello
Run Code Online (Sandbox Code Playgroud)

!#表示将之前的字符串替换!#为当前行之前的字符串(避免再次写入的快捷方式)

     0th    1st     2nd      3rd
-------- ------- ------ --------
    echo "hello"   echo  "hello"
-------- ------- ------  -------
Run Code Online (Sandbox Code Playgroud)

!#:0 表示第0列的替代值

!#:1 表示第一栏的替代价值

echo "hello" !#:1
Run Code Online (Sandbox Code Playgroud)

该命令的输出与以下命令的输出相同:

echo "hello" "hello"
Run Code Online (Sandbox Code Playgroud)

这是:

hello hello
Run Code Online (Sandbox Code Playgroud)

!#:1 在第一列中被字符串替换— "hello"

echo "hello" !#:0
Run Code Online (Sandbox Code Playgroud)

产生与以下相同的输出:

echo "hello" echo
Run Code Online (Sandbox Code Playgroud)

这是:

hello echo
Run Code Online (Sandbox Code Playgroud)

!#:0 在第0列中被字符串替换- echo