Qual é o significado de $ * em um script de shell? [duplicado]

3

Em um arquivo de script de shell eu vi "$ *", o que significa e quando temos que usá-lo?

    
por Saeed Zarinfam 14.10.2013 / 08:49

2 respostas

2

Em bash(1)

Special Parameters

The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed.

* Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, it expands to a single word with the value of each parameter separated by the first character of the IFS special variable. That is, "$*" is equivalent to "$1c$2c…", where c is the first character of the value of the IFS variable. If IFS is unset, the parameters are separated by spaces. If IFS is null, the parameters are joined without intervening separators.

@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" …. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).

Basicamente, $* é uma variável especial cujo valor é o parâmetro do script (ou da função shell). Na maioria das vezes, "$@" é mais apropriado.

    
por 14.10.2013 / 09:03
1

Isso corresponde a todos os parâmetros passados para o script. No seu exemplo, ele está entre aspas; isso é importante, pois as cotas encapsulam o (presumivelmente) espaço em branco entre os parâmetros. Omitir as aspas em scripts de shell pode ser uma fonte de erros.

Aqui, no caso de bash, retirado da página do manual:

 *      Expands to the positional parameters, starting from one.  When the expansion  occurs
          within  double  quotes, it expands to a single word with the value of each parameter
          separated by the first character of the IFS special  variable.   That  is,  "$*"  is
          equivalent  to  "$1c$2c...",  where c is the first character of the value of the IFS
          variable.  If IFS is unset, the parameters are separated by spaces.  If IFS is null,
          the parameters are joined without intervening separators.

felicidades

sc.

    
por 14.10.2013 / 09:03