Suponho que você tenha definido IFS para , para analisar o CSV. Pelo menos quando faço isso, recebo a mesma mensagem de erro:
IFS=,
FIELDS="NAME PRETTY_NAME DESC"
while read $FIELDS; do
echo $NAME
done < some.csv
Isso porque o shell analisa read $FIELDS usando $IFS , portanto, ele procura , para separar os argumentos; assim, NAME PRETTY_NAME DESC acaba sendo interpretado como um único argumento em vez de três, e o resultado é um nome de identificador inválido.
Usar uma matriz conforme sugerido por GMaster funciona neste caso:
IFS=,
FIELDS=(NAME PRETTY_NAME DESC)
while read ${FIELDS[@]}; do
echo $NAME
done < some.csv