5 ms·
>Unless you need to run programs with arguments with spaces in their name. It does that just fine, I don't have all the details obviously but it sounds like pr
by PhilipRoman 2y ago
>Unless you need to run programs with arguments with spaces in their name.
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.
- wiseowise 2y ago> ${arg@Q} Right, how couldn’t they know to type actual gibberish to make it work.
- PhilipRoman 2y agoGoogle "bash escape string", click on first result? It mentions both of these options btw. It's not like it's any easier with python, if I'm new to the language I have to look up shlex anyway.
- skydhash 2y agoNot gibberish. It’s all explained there: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html https://www.gnu.org/software/bash/manual/html_node/Shell-Par... 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?
- jcranmer 2y agoI have a variable, say $X, that contains a command, and the command has quoted arguments with spaces, let's say <<echo "A B">>. Now how do I execute it? If I do $X, the result <<"A B">>, not <<A B>>. If I do "$X", it fails, because there's no filename <<echo "A B">> to execute. 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.
- PhilipRoman 2y agoI see your point, but I still have to disagree. Your task would be inherently complicated for any language - imagine trying to properly add another argument to a function call written in python. In fact it has nothing to do with spaces in arguments, but rather re-parsing strings as shell commands which is always a tricky task. >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.
- databasher 2y agoBash handles spaces just fine. # store the command in an array X=(echo "A B") # execute the command "${X[@]}" Yields: A B