Cosa significa l’operatore Bash <<<?

Cosa significa l’operatore di bash <<<, come all'interno del seguente blocco di codice? E come mai $ IFS rimane uno spazio, non un punto?

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

Reindirizza la stringa a stdin del comando.

Le variabili assegnate direttamente prima del comando in questo modo hanno effetto solo per il processo di comando; il guscio rimane intatto.

man bash

Here Strings Una variante di here document, il formato è:

  < < 

La parola viene espansa e fornita al comando sul suo input standard.

Il . sulla linea IFS è equivalente alla source in bash.

Aggiornamento: Altro da man bash (Grazie gsklee, sehe)

IFS Il separatore di campo interno che viene utilizzato per la divisione delle parole dopo l'espansione e per dividere le righe in parole con il comando incorporato di lettura . Il valore predefinito è " ".

ancora di più man bash

L'ambiente per qualsiasi comando o funzione semplice può essere aumentato temporaneamente mediante il prefisso con le assegnazioni dei parametri, come descritto sopra in PARAMETRI. Queste istruzioni di assegnazione riguardano solo l'ambiente visto da quel comando.

Il motivo per cui IFS non viene impostato è che bash non lo vede come un comando separato … devi mettere un feed di riga o un punto e virgola dopo il comando per 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 

ma

 $ 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 

Non sono sicuro del perché farlo nel primo modo non è stato però un errore di syntax.