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 daIFS
variável especial. Ou seja,"$*"
equivale a"$1c$2c…"
, onde c é o primeiro caractere do valor daIFS
variável. SeIFS
não estiver definido, os parâmetros serão separados por espaços. SeIFS
for 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.