If you never run into this problem, fair enough, maybe you don't need bash.
A lot of us do.
Not that long ago, I needed to write a script that would grab the last command in a shell file that had a list of commands, add an argument or two to it, and run it. Which proceeded to barf because the command had quotes, for some of the arguments had necessary spaces in them, and I couldn't figure out the way to get the necessary string in a way that bash could properly execute the command. My eventual solution was to just use python's shlex module to parse the line and output an executable command (and remark that I should have just started the script in Python in the first place)...
It does that just fine, I don't have all the details obviously but it sounds like printf %q or ${arg@Q} is your friend here.
In a program with proper arrays, I can instead parse X to the strings ["echo", "A B"], and then run execve to run ["echo", "A B"] without any issues. And adding another argument to make ["echo", "A B", "C"] is damn trivial.
No, bash doesn't handle arguments with spaces just fine. If you do the basic, obvious way to do things, things break, and you're expected to know magic invocations to do the right thing to handle potential spaces.
>In a program with proper arrays, I can instead parse X to the strings
Well, if I were to write it in Java or Javascript, both of which have excellent support for arrays (the shell does as well, actually - via "set"), it still wouldn't get me an inch closer to achieving the goal. It seems to me that the real problem is lack of a first-class shell grammar parser, which affects most languages, not just the shell itself. Python just happens to have a shell grammar parser that is shipped with the installation.
# store the command in an array
X=(echo "A B")
# execute the command
"${X[@]}"
Yields: A BRight, how couldn’t they know to type actual gibberish to make it work.
If you’re doing stuff with something, why not read the manual os that thing? Or, at least, the section related to what you’re doing?
It's not like it's any easier with python, if I'm new to the language I have to look up shlex anyway.
printf '(%s)\n' "one two" "three four five"
echo "How you doin'?"
Running: while read -r line; do
eval command=($line)
command+=("arg with spaces" "other arg")
"${command[@]}"
done < lines.txt
Yields (one two)
(three four five)
(arg with spaces)
(other arg)
How you doin'? arg with spaces other argThere's no requirement that a shell language suck as much as bash.