¿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
Peter.O
fuente

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.

hombre trabajando
fuente
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).

Gilles 'SO- deja de ser malvado'
fuente