The effect comes from the shell. Without double quotes the shell replaces newlines, tabs and spaces with spaces. You can avoid this substitution with double quotes. See the section Word Splitting
in the man page of bash(1)
for more details:
Word Splitting
The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within
double quotes for word splitting.
The shell treats each character of IFS as a delimiter, and splits the
results of the other expansions into words on these characters. If IFS
is unset, or its value is exactly , the default,
then any sequence of IFS characters serves to delimit words. If IFS
has a value other than the default, then sequences of the whitespace
characters space and tab are ignored at the beginning and end of the
word, as long as the whitespace character is in the value of IFS (an
IFS whitespace character). Any character in IFS that is not IFS white-
space, along with any adjacent IFS whitespace characters, delimits a
field. A sequence of IFS whitespace characters is also treated as a
delimiter. If the value of IFS is null, no word splitting occurs.
You can see the content of IFS
with echo "$IFS" | xxd
. It will show you
00000000: 2009 0a0a ...
which means space (0x20), tab (0x09) and newline (0x0a). The second 0x0a comes from the echo command.
You can avoid this substitution by setting IFS
to the empty string:
IFS=""
echo "$current_processes"
19984
10089
17784
But I wouldn't recommend this.