O primeiro argumento do bash é diferente quando o parâmetro é passado ou não [duplicado]

2

Há dois bash usos:

$ bash -c 'echo $0'
bash

$bash -c 'echo $0' "text"
text

Por que, no primeiro caso, o parâmetro $0 contém o nome do programa, mas no segundo o primeiro parâmetro?

    
por scdmb 18.09.2015 / 22:33

1 resposta

9

Na página bash man:

   -c        If the -c option is present, then commands are read from  the
             first non-option argument command_string.  If there are argu‐
             ments after the command_string,  they  are  assigned  to  the
             positional parameters, starting with $0.

E mais abaixo:

   If arguments remain after option processing, and neither the -c nor the
   -s option has been supplied, the first argument is assumed  to  be  the
   name  of  a file containing shell commands.  If bash is invoked in this
   fashion, $0 is set to the name of the file, and the positional  parame‐
   ters  are set to the remaining arguments.

Em resumo, o comportamento de $0 varia dependendo de como o bash é invocado.

    
por 18.09.2015 / 22:40

Tags