2012-09-13 29 views
7

¿Qué significa exactamente $* en un script de shell?

Por ejemplo, consideremos el siguiente fragmento de código

$JAVA_HOME/bin/java/com/test/Testclass $* 
+1

http: // TLDP .org/LDP/abs/html/internalvariables.html # ARGLIST – alfasin

+0

Todos los parámetros posicionales de la línea de comandos que llaman al script: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF – GreenMatt

+0

Los documentos basados ​​en POSIX son particularmente útiles aquí ya que se aplican a algo más que a bash: http://pubs.opengroup.org/ onlinepubs/9699919799/utilities/V3_chap02.html # tag_18_05_02 –

Respuesta

7

Significa todos los argumentos pasados ​​a la secuencia de comandos o a la función, divididos por palabra.

Suele ser incorrecto y debe reemplazarse por "[email protected]", que separa los argumentos correctamente.

+3

Bueno, @ ДМИТРИЙ МАЛИКОВ (¿Dmitri?) ya explicó cómo $ * se construyó inicialmente como una sola cadena. Lo importante aquí es que posteriormente se somete a la división de palabras normal de la capa, * a menos que * esté entre comillas. "$ *" se asegurará de que el argumento se siga procesando como una sola cadena larga. "$ @" obliga a la lista de argumentos a procesarse como una matriz de cadenas entre comillas. Cada uno tiene su uso, y es importante saber la diferencia. –

6

Es fácil encontrar la respuesta por sí mismo: man bash/\$\*:

parámetros especiales

Los shell trata varios parámetros especialmente . Estos parámetros solo pueden ser referenciados; la asignación a ellos no está permitida.

  • Se amplía a los parámetros posicionales, comenzando desde uno. Cuando la expansión se produce dentro de comillas dobles, se expande a una sola palabra con el valor de cada parámetro separado por el primer carácter de la variable especial IFS. Es decir, "$*" es equivalente a "$1c$2c...", donde c es el primer carácter del valor de la variable IFS. Si IFS está desactivado, los parámetros están separados por espacios. Si IFS es nulo, los parámetros se unen sin separadores intermedios.
1

$* se expande a todos los parámetros que se pasaron a ese script de shell.

$0 = nombre del script de shell

$1 = primer argumento

$2 = segundo argumento ... etc

$# = número de argumentos pasados ​​a ShellScript

Cuestiones relacionadas