Escaping a string for a parameter inside a script
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
New contributor
add a comment |
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
New contributor
1
simplyARGS='--foo=bar baz'
should do if there is a single argument; orset -- '--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 taggedbash
, 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
add a comment |
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
New contributor
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
bash shell-script terminal string escape-characters
New contributor
New contributor
New contributor
asked 1 hour ago
theasianpianisttheasianpianist
1
1
New contributor
New contributor
1
simplyARGS='--foo=bar baz'
should do if there is a single argument; orset -- '--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 taggedbash
, 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
add a comment |
1
simplyARGS='--foo=bar baz'
should do if there is a single argument; orset -- '--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 taggedbash
, 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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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.
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
1
simply
ARGS='--foo=bar baz'
should do if there is a single argument; orset -- '--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