O que acontece com o argumento no alias depois de usá-lo uma vez? [duplicado]

1

Por que isso só imprime arg uma vez?

$ alias test="echo $1 $1 $1"
$ test arg
arg

Isto está no bash do GNU, versão 4.2.25 (1) -release (x86_64-pc-linux-gnu).

    
por user1227038 11.09.2013 / 10:03

2 respostas

2

Aliases de lista com o comando alias depois que você definiu esse alias e você o entenderá claramente:

alias test="echo $1 $1 $1"
alias

Saída:

alias test='echo   '

Ele simplesmente se expande para uma string com variáveis que foram definidas em tempo de execução. Então, por exemplo, isso funciona (Vvariável MY_VAR é definido):

MY_VAR="foo"
alias test="echo $MY_VAR $MY_VAR $MY_VAR"
alias

Saída:

alias test='echo  foo foo foo'

Você pode substituí-lo com a função

function test() {
    echo $1 $1 $1
}
    
por 11.09.2013 / 10:12
1

Eu duvido que alias suporte $ 1, $ 2, ... Sua ajuda mantém silêncio sobre isso.

Então, acho que seu comando test arg está expandido como echo $1 $1 $1 arg . Onde $ 1 está vazio e você obtém seu resultado.

mais 1 exemplo:

$ alias test='echo $1 $1 $1'
$ test arg1 arg2
arg1 arg2

No exemplo acima, o alias test=... get é executado e o efeito líquido é que nos deixamos com um alias para o comando echo . Podemos ver esse efeito quando executamos o comando test arg1 arg2 . Tudo o que estamos fazendo é executar echo e passar as strings arg1 e arg2 .

$ echo arg1 arg2
    
por 11.09.2013 / 10:14