Escaping a string for a parameter inside a script












0















I have a shell script inside of which I call a command with several arguments. When I call the command from the terminal, the proper syntax is:



command --foo='bar baz'


Inside my script, I want to have --foo='bar baz' inside a variable $ARGS, so that I can put



command $ARGS


in my script. However, if I simply assign $ARGS="--foo='bar baz'" then the string 'bar gets passed as the parameter for foo instead of the complete string bar Every combination of quotes/escaped quotes that I've tried has resulted in either nothing being passed, or just'bar` or something similar. I've looked into parameter expansion in bash but am not quite sure how it works. Any help would be appreciated.



I would just copy/paste the entire command and its arguments instead of using variables but I call the command in multiple places in the script and want to minimize code re-use, as the complete list of arguments is several lines long.










share|improve this question







New contributor




theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1





    simply ARGS='--foo=bar baz' should do if there is a single argument; or set -- '--foo=bar baz' '--quux=x y'; command "$@" if there are multiple arguments. If it doesn't, please post a reproducible script snippet.

    – mosvy
    1 hour ago













  • And since your question is tagged bash, you can also use arrays: args=('--foo=bar baz' '--quux=x y'); command "${args[@]}". But you cannot pass arrays through environment variables.

    – mosvy
    1 hour ago











  • Possible duplicate of Why does my shell script choke on whitespace or other special characters?

    – G-Man
    1 hour ago











  • @mosvy decided to go with the array approach which works beautifully, thanks!

    – theasianpianist
    1 hour ago
















0















I have a shell script inside of which I call a command with several arguments. When I call the command from the terminal, the proper syntax is:



command --foo='bar baz'


Inside my script, I want to have --foo='bar baz' inside a variable $ARGS, so that I can put



command $ARGS


in my script. However, if I simply assign $ARGS="--foo='bar baz'" then the string 'bar gets passed as the parameter for foo instead of the complete string bar Every combination of quotes/escaped quotes that I've tried has resulted in either nothing being passed, or just'bar` or something similar. I've looked into parameter expansion in bash but am not quite sure how it works. Any help would be appreciated.



I would just copy/paste the entire command and its arguments instead of using variables but I call the command in multiple places in the script and want to minimize code re-use, as the complete list of arguments is several lines long.










share|improve this question







New contributor




theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1





    simply ARGS='--foo=bar baz' should do if there is a single argument; or set -- '--foo=bar baz' '--quux=x y'; command "$@" if there are multiple arguments. If it doesn't, please post a reproducible script snippet.

    – mosvy
    1 hour ago













  • And since your question is tagged bash, you can also use arrays: args=('--foo=bar baz' '--quux=x y'); command "${args[@]}". But you cannot pass arrays through environment variables.

    – mosvy
    1 hour ago











  • Possible duplicate of Why does my shell script choke on whitespace or other special characters?

    – G-Man
    1 hour ago











  • @mosvy decided to go with the array approach which works beautifully, thanks!

    – theasianpianist
    1 hour ago














0












0








0








I have a shell script inside of which I call a command with several arguments. When I call the command from the terminal, the proper syntax is:



command --foo='bar baz'


Inside my script, I want to have --foo='bar baz' inside a variable $ARGS, so that I can put



command $ARGS


in my script. However, if I simply assign $ARGS="--foo='bar baz'" then the string 'bar gets passed as the parameter for foo instead of the complete string bar Every combination of quotes/escaped quotes that I've tried has resulted in either nothing being passed, or just'bar` or something similar. I've looked into parameter expansion in bash but am not quite sure how it works. Any help would be appreciated.



I would just copy/paste the entire command and its arguments instead of using variables but I call the command in multiple places in the script and want to minimize code re-use, as the complete list of arguments is several lines long.










share|improve this question







New contributor




theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I have a shell script inside of which I call a command with several arguments. When I call the command from the terminal, the proper syntax is:



command --foo='bar baz'


Inside my script, I want to have --foo='bar baz' inside a variable $ARGS, so that I can put



command $ARGS


in my script. However, if I simply assign $ARGS="--foo='bar baz'" then the string 'bar gets passed as the parameter for foo instead of the complete string bar Every combination of quotes/escaped quotes that I've tried has resulted in either nothing being passed, or just'bar` or something similar. I've looked into parameter expansion in bash but am not quite sure how it works. Any help would be appreciated.



I would just copy/paste the entire command and its arguments instead of using variables but I call the command in multiple places in the script and want to minimize code re-use, as the complete list of arguments is several lines long.







bash shell-script terminal string escape-characters






share|improve this question







New contributor




theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 1 hour ago









theasianpianisttheasianpianist

1




1




New contributor




theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






theasianpianist is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 1





    simply ARGS='--foo=bar baz' should do if there is a single argument; or set -- '--foo=bar baz' '--quux=x y'; command "$@" if there are multiple arguments. If it doesn't, please post a reproducible script snippet.

    – mosvy
    1 hour ago













  • And since your question is tagged bash, you can also use arrays: args=('--foo=bar baz' '--quux=x y'); command "${args[@]}". But you cannot pass arrays through environment variables.

    – mosvy
    1 hour ago











  • Possible duplicate of Why does my shell script choke on whitespace or other special characters?

    – G-Man
    1 hour ago











  • @mosvy decided to go with the array approach which works beautifully, thanks!

    – theasianpianist
    1 hour ago














  • 1





    simply ARGS='--foo=bar baz' should do if there is a single argument; or set -- '--foo=bar baz' '--quux=x y'; command "$@" if there are multiple arguments. If it doesn't, please post a reproducible script snippet.

    – mosvy
    1 hour ago













  • And since your question is tagged bash, you can also use arrays: args=('--foo=bar baz' '--quux=x y'); command "${args[@]}". But you cannot pass arrays through environment variables.

    – mosvy
    1 hour ago











  • Possible duplicate of Why does my shell script choke on whitespace or other special characters?

    – G-Man
    1 hour ago











  • @mosvy decided to go with the array approach which works beautifully, thanks!

    – theasianpianist
    1 hour ago








1




1





simply ARGS='--foo=bar baz' should do if there is a single argument; or set -- '--foo=bar baz' '--quux=x y'; command "$@" if there are multiple arguments. If it doesn't, please post a reproducible script snippet.

– mosvy
1 hour ago







simply ARGS='--foo=bar baz' should do if there is a single argument; or set -- '--foo=bar baz' '--quux=x y'; command "$@" if there are multiple arguments. If it doesn't, please post a reproducible script snippet.

– mosvy
1 hour ago















And since your question is tagged bash, you can also use arrays: args=('--foo=bar baz' '--quux=x y'); command "${args[@]}". But you cannot pass arrays through environment variables.

– mosvy
1 hour ago





And since your question is tagged bash, you can also use arrays: args=('--foo=bar baz' '--quux=x y'); command "${args[@]}". But you cannot pass arrays through environment variables.

– mosvy
1 hour ago













Possible duplicate of Why does my shell script choke on whitespace or other special characters?

– G-Man
1 hour ago





Possible duplicate of Why does my shell script choke on whitespace or other special characters?

– G-Man
1 hour ago













@mosvy decided to go with the array approach which works beautifully, thanks!

– theasianpianist
1 hour ago





@mosvy decided to go with the array approach which works beautifully, thanks!

– theasianpianist
1 hour ago










0






active

oldest

votes











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






theasianpianist is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f506638%2fescaping-a-string-for-a-parameter-inside-a-script%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes








theasianpianist is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















theasianpianist is a new contributor. Be nice, and check out our Code of Conduct.













theasianpianist is a new contributor. Be nice, and check out our Code of Conduct.












theasianpianist is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f506638%2fescaping-a-string-for-a-parameter-inside-a-script%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Loup dans la culture

How to solve the problem of ntp “Unable to contact time server” from KDE?

Connection limited (no internet access)