En un archivo de script de shell vi "$*", ¿qué significa y cuándo tenemos que usarlo?
Respuesta1
Debash(1)
…
Parámetros especiales
El shell trata varios parámetros de forma especial. Estos parámetros sólo pueden ser referenciados; no se permite la asignación a ellos.
*
Se expande a los parámetros posicionales, comenzando desde uno. Cuando la expansión ocurre entre comillas dobles, se expande a una sola palabra con el valor de cada parámetro separado por el primer carácter de laIFS
variable especial. Es decir,"$*"
equivale a"$1c$2c…"
, donde c es el primer carácter del valor de laIFS
variable. SiIFS
no está configurado, los parámetros están separados por espacios. SiIFS
es nulo, los parámetros se unen sin que intervengan separadores.
@
Se expande a los parámetros posicionales, comenzando desde uno. Cuando la expansión se produce entre comillas dobles, cada parámetro se expande a una palabra separada. Es decir,"$@"
equivale a"$1" "$2" …
. Si la expansión entre comillas dobles ocurre dentro de una palabra, la expansión del primer parámetro se une con la parte inicial de la palabra original y la expansión del último parámetro se une con la última parte de la palabra original. Cuando no hay parámetros posicionales, se"$@"
expande$@
a nada (es decir, se eliminan).
Básicamente, $*
es una variable especial cuyo valor son los parámetros del script (o función de shell). La mayoría de las veces "$@"
es más apropiado.
Respuesta2
Esto corresponde a todos los parámetros pasados al script. En su ejemplo, está entre comillas; esto es importante ya que las comillas encapsulan el (presumiblemente) espacio en blanco entre los parámetros. Omitir las comillas en los scripts de shell a menudo puede ser una fuente de errores.
Aquí, en el caso de bash, tomado de la 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.
salud
Carolina del Sur.