The quotes are only used outside of pipes. One file per line without quote has always been the comportment of ls when piped (but with shell globbing you rarely if ever have to pipe ls anyway).
It's not pretty, and it shouldn't be done but it's doable (in many shells, but none of this is specified in POSIX):
ls --quoting-style=shell-escape-always | while read -r escaped; do
eval "filename=$escaped"
echo "'$filename'"
done $ cd "$(mktemp --directory)"
$ touch $'foo\'\n\'bar'
$ ls --quoting-style=shell-escape-always | while read -r escaped; do
> eval "filename=$escaped"
> echo "'$filename'"
> done
'foo'
'bar'
There's no way to tell that that's one file rather than two. Seriously, parsing ls output reliably isn't possible. I've seen exactly one example of a legitimate ls in a script (just this week, for the first time in many years using Bash), and all that did was to check something like whether a directory was empty. $ touch $'foo\'\n\'bar'
$ ls --quoting-style=shell-escape-always | while read -r escaped; do
> eval "filename=$escaped"
> echo "[$filename]"
> done
[foo'
'bar]