Basicamente, é o último argumento para o comando anterior.
!$
é o "fim" do comando anterior. Considere o seguinte exemplo: Começamos procurando uma palavra em um arquivo:
grep -i joe /some/long/directory/structure/user-lists/list-15
se joe estiver nessa lista de usuários, queremos removê-lo. Podemos iniciar o vi com essa longa árvore de diretórios como argumento, ou simplesmente como vi !$
Qual bash se expande para:
vi /some/long/directory/structure/user-lists/list-15
( fonte ; guia prático, a propósito)
Não vale nada a distinção entre esse !$
token e a variável shell especial $_
. De fato, ambos se expandem para o último argumento do comando anterior. No entanto, !$
é expandido durante a expansão do histórico , enquanto $_
é expandido durante a expansão de parâmetros . Uma conseqüência importante disso é que, quando você usa !$
, o comando expandido é salvo no seu histórico.
Por exemplo, considere as teclas digitadas
(Os únicos caracteres alteradas são o $!
e $_
no meio).
No primeiro, quando você pressiona Up, a linha de comando lê echo Foo Jar
; portanto, a última linha gravada em stdout é Foo Jar
.
Neste último, quando você pressiona Up, a linha de comando lê echo $_ bar
, mas agora $_
tem um valor diferente do que anteriormente - na verdade, $_
é agora Jar
, então a última linha gravada em stdout é Jar Jar
.
Outra conseqüência é que _
pode ser usado em outras expansões de parâmetros, por exemplo, a sequência de comandos
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
impressões isomorphism isosceles
. Mas não há ${!$%morphism}
expansão " " análoga .
Para obter mais informações sobre as fases de expansão no Bash, consulte a EXPANSION
seção man 1 bash
(isso é chamado de expansões de shell na edição online). A HISTORY EXPANSION
seção é separada.
echo
algo se você não tiver certeza do que ele fará.