The correct solution would be:
while read -r CURRENT_LINE; do \
LINE="$${CURRENT_LINE}" ;
echo "LINE:$${LINE}"; \
done
You need to distinguish between make variables and bash variables, and understand that make expands make variables before passing strings to the shell.
echo "$$CURRENT_LINE" ; \ ##WORKING FINE, display line by line
LINE=$(shell echo "$$CURRENT_LINE") ; \ ##NOT WORKING
echo "line:-$(LINE)" ; \ ##empty
This has two errors: first, you're running $(shell ...), which starts a new shell when make is parsing the recipe... (notice that this is before the recipe runs, and therefore before CURRENT_LINE is set), so in this shell instance, $CURRENT_LINE will expand to empty. The second issue is that you're doing an echo of $(LINE), which is also expanded at make parse time to make's value of its LINE variable. You would need to use $$LINE, which make would expand to $LINE before passing to the shell, and then the shell would be able to expand to its value of $LINE.
For the next part:
LINE=$$(CURRENT_LINE) ; \ ##NOT WORKING
echo "line:-$(LINE)" ; \ ##empty
First line should be LINE=$$CURRENT_LINE or LINE=$${CURRENT_LINE}. Bash treats items in $(...) as commands, not variables. This also has a second error that the echo line echo's $(LINE) is again a make variable, which is empty.
y=$(subst :, ,$$CURRENT_LINE) ; \ ##NOT WORKING
echo "y:- $(y)"; \ ##empty
So again this is an order thing -- $(subst ...) is expanded at make parse time (before the recipe is actually passed to shell). What it's doing is it's substituting on the string $CURRENT_LINE, not the expanded version of this. Also, you're printing the make version of $(y) again.