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

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

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

Responder1

Debash(1)

Parâmetros Especiais

O shell trata vários parâmetros especialmente. Estes parâmetros só podem ser referenciados; atribuição a eles não é permitida.

* Expande para os parâmetros posicionais, começando em um. Quando a expansão ocorre entre aspas duplas, ela se expande para uma única palavra com o valor de cada parâmetro separado pelo primeiro caractere da IFSvariável especial. Ou seja, "$*"equivale a "$1c$2c…", onde c é o primeiro caractere do valor da IFSvariável. Se IFSnão estiver definido, os parâmetros serão separados por espaços. Se IFSfor nulo, os parâmetros serão unidos sem separadores intermediários.

@ Expande para os parâmetros posicionais, começando em um. Quando a expansão ocorre entre aspas duplas, cada parâmetro se expande para uma palavra separada. Ou seja, "$@"é equivalente a "$1" "$2" …. Se a expansão entre aspas duplas ocorrer dentro de uma palavra, a expansão do primeiro parâmetro será unida à parte inicial da palavra original e a expansão do último parâmetro será unida à última parte da palavra original. Quando não há parâmetros posicionais "$@"e $@expande para nada (ou seja, eles são removidos).

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

Responder2

Isso corresponde a todos os parâmetros passados ​​ao script. No seu exemplo, está entre aspas; isso é importante porque as aspas encapsulam o (presumivelmente) espaço em branco entre os parâmetros. Omitir as aspas em scripts de shell muitas vezes pode ser uma fonte de bugs.

Aqui, no caso do bash, retirado da página de 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.

saúde

sc.

informação relacionada