¿Cuál es el significado de $* en un script de shell?

¿Cuál es el significado de $* en un script de shell?

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 la IFSvariable especial. Es decir, "$*"equivale a "$1c$2c…", donde c es el primer carácter del valor de la IFSvariable. Si IFSno está configurado, los parámetros están separados por espacios. Si IFSes 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.

información relacionada