¿Qué significa el operador de Bash <<<?

¿Qué significa el operador de bash <<<, como dentro del siguiente bloque de código? ¿Y cómo es que $ IFS sigue siendo un espacio, no un período?

LINE="7.6.5.4" IFS=. read -a ARRAY <<< "$LINE" echo "$IFS" echo "${ARRAY[@]}" 

Redirige la cadena a stdin del comando.

Las variables asignadas directamente antes del comando de esta manera solo tienen efecto para el proceso de comando; el caparazón permanece intacto.

De man bash

Aquí, cadenas Una variante de los documentos aquí, el formato es:

  << 

La palabra se expande y se le proporciona al comando en su entrada estándar.

El . en la línea IFS es equivalente a la source en bash.

Actualización: más de man bash (Gracias gsklee, sehe)

IFS El separador de campo interno que se utiliza para dividir palabras después de la expansión y para dividir las líneas en palabras con el comando de lectura incorporada . El valor predeterminado es " ".

aún más de man bash

El entorno para cualquier comando o función simple se puede boost temporalmente prefijando asignaciones de parámetros, como se describe arriba en PARÁMETROS. Estas declaraciones de asignación afectan solo al entorno visto por ese comando.

La razón por la que IFS no se está configurando es porque bash no está viendo eso como un comando separado … necesita poner un avance de línea o un punto y coma después del comando para terminarlo:

 $ cat /tmp/ifs.sh LINE="7.6.5.4" IFS='.' read -a ARRAY <<< "$LINE" echo "$IFS" echo "${ARRAY[@]}" $ bash /tmp/ifs.sh 7 6 5 4 

pero

 $ cat /tmp/ifs.sh LINE="7.6.5.4" IFS='.'; read -a ARRAY <<< "$LINE" echo "$IFS" echo "${ARRAY[@]}" $ bash /tmp/ifs.sh . 7 6 5 4 

No estoy seguro de por qué hacerlo de la primera manera no fue un error de syntax.