compreendendo a saída do eco seguido por alguns sinais de exlamação

4

Eu estava jogando com echo $$ há algum tempo. Bem, isso mostra que o pid do shell. Mas então eu fiz echo ! que prontamente exibido! Então echo !! produzido

echo echo !
echo !

$echo !!! deu

echo echo echo !!
echo echo !!

Eu não consegui entender as saídas. Tanto quanto eu sei, echo !! dá o último comando que foi executado no shell. Mas as saídas que eu recebo aqui são estranhas para eu entender. Eu uso o shell bash.

    
por Dharmit 12.04.2011 / 10:23

2 respostas

12

O designador do evento histórico !! é substituído pelo último comando em sua história. Bash primeiro imprime o comando como ele será executado e, em seguida, o executa.

Exemplo:

$ foo
foo: command not found
$ !!
foo                     # command to be executed
foo: command not found  # result of execution

No seu caso:

$ echo !
!
$ echo !!
echo echo !         # command to be executed
echo !              # result of execution
$ echo !!!
echo echo echo !!   # command to be executed
echo echo !!        # result of execution

Observe que um comando com um designador de evento não é inserido no histórico conforme digitado. Primeiro, o designador do evento é expandido e, em seguida, o comando é inserido no histórico. É por isso que no terceiro comando ( echo !!! ), o designador do evento não é substituído por echo !! (o segundo comando digitado), mas por echo echo ! (o segundo comando expandido).

Aqui está o último comando novamente com a parte substituída em destaque:

$ echo (!!)!
echo (echo echo !)! # command to be executed
echo echo !!        # result of execution
    
por 12.04.2011 / 10:42
4

Se você usar !! que é substituído pelo último comando no shell, a primeira linha será a < strong> mostre a substituição echo echo ! e a segunda uma é a saída echo !

    
por 12.04.2011 / 10:43

Tags