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

时间:2014-08-26 02:35:54

标签: linux bash

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

echo "This is a sentence." !#:* !#:1- >text3

2 个答案:

答案 0 :(得分:8)

使用bash's history substitution mechanism.

具体来说,!#指的是当前行(最多但不包括!#本身的位置)。 !#:*是命令名后面的那一行的一部分(因此,在这种情况下,"This is a sentence.")。 !#:1-!#:*相同,只是它省略了最后一个字(因此它不包含我们刚刚通过"This is a sentence"添加的!#:*的第二个副本)。

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

答案 1 :(得分:4)

来自:

的输出
echo "hello" !#        

等同于:

的输出
echo "hello" echo "hello"

是:

hello echo hello

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

     0th    1st     2nd      3rd
-------- ------- ------ --------
    echo "hello"   echo  "hello"
-------- ------- ------  -------

!#:0表示第0列中的替换值

!#:1表示第1列中的替换值

实施例

echo "hello" !#:1

该输出与以下输出相同:

echo "hello" "hello"

是:

hello hello
第一列中的

!#:1替换为字符串 - "hello"

echo "hello" !#:0

产生与<:p>相同的输出

echo "hello" echo

是:

hello echo

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