¿Por qué 'para cualquier texto; hacer 'bucle cuatro veces?


9

¿Es esto un error o una característica?
Parece suceder para alfanuméricos sin comillas .

Ejecutando GNU bash, versión 4.1.5

for alpha01234; do echo $((++i)); done

salida:

1
2
3
4

Respuestas:


14

Esa es una característica del forcomando compuesto, como se describe en help for:

for: for NAME [in WORDS ... ] ; do COMMANDS; done

Ejecute comandos para cada miembro en una lista.

El forbucle ejecuta una secuencia de comandos para cada miembro en una lista de elementos. Si in WORDS ...;no está presente, entonces in "$@"se supone. Para cada elemento en WORDS, NAMEse establece en ese elemento y COMMANDSse ejecutan.

Por lo tanto, el código que citó probablemente se ejecuta en un script que se llamó con 4 parámetros.


Gracias ... Lo que me sorprendió por completo fue que sucedió en la línea de comando ... En realidad no lo intenté en un script ... Debí haberlo usado set a b c den algún momento recientemente. A menudo uso setde esa manera en una secuencia de comandos para probar .. Después de reiniciar el terminal, se ha detenido ... (tiene sentido ahora) ..
Peter.O

12

for x; do …es un atajo para for x in "$@"; do …: itera sobre los parámetros posicionales. Si se repite cuatro veces, significa que tiene cuatro parámetros posicionales (a $1través $4).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.