Variável da shell $ _ não se comportando como esperado

11

Qual o motivo pelo qual o número de linhas difere?

$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424
    
por Loom 23.03.2016 / 09:39

1 resposta

26

$_ está expandindo para ./access.log (último argumento do último comando executado), não ./data/log.sample .

Então você está realmente vendo o número de linhas de ./access.log .

O redirecionamento ( > ) não faz parte do comando head , como é feito pelo shell antes que o comando head seja iniciado. Assim, com $_ , você obteria ./access.log .

De man bash :

($_, an underscore.) At shell startup, set to the absolute pathname used to invoke the shell or shell script being executed as passed in the environment or argument list. Subsequently, expands to the last argument to the previous command, after expansion. Also set to the full pathname used to invoke each command executed and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file.

    
por 23.03.2016 / 09:42