Sim, isso está usando o histórico.
!# é um designador do evento histórico
que se refere a toda a linha de comando digitada até agora.
:* é um designador de palavra (intervalo) que se refere a todas as palavras, exceto a 0ª.
Então, depois de ter digitado echo "This is a sentence. " ,
então !#:* expande para "This is a sentence. " .
E x-y (onde x e y são inteiros)
é um designador de palavra (intervalo) que se refere ao número da palavra x através do número da palavra y .
Se y for omitido ( x- ),
isto é interpretado como significando o número da palavra x através da segunda para a última palavra.
Então, depois que sua “linha de comando inteira digitada até agora”
echo "This is a sentence. " "This is a sentence. "
então !#:1- expande para "This is a sentence. " ,
porque cada uma das strings "This is a sentence. " citadas conta como uma palavra,
e assim !#:1- é equivalente a !#:1 (apenas palavra número 1).
Então você acaba com
echo "This is a sentence. " "This is a sentence. " "This is a sentence. " >text3
O fato de que - e > aparecem juntos no comando é apenas uma confusão;
eles não interagem.
E o fato de que “Isto é uma frase” é citado obscurece o que está acontecendo; se você disse
echo This is a sentence. !#:* !#:1-
expandir-se-ia para
echo This is a sentence. This is a sentence. !#:1-
e daí para
echo This is a sentence. This is a sentence. This is a sentence. This is a
(porque !#:1- se expande para a palavra número 1 até a segunda para a última palavra.)