Print name if parameter passed to function
I have written a little function that exits if the value of the function argument is empty, I would like to be able to also print the name of the parameter (not the value!) if it is possible, my following implementation fails to print the name of the parameter.
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${!1} is empty"
exit 1
fi
}
when called like so
exitIfEmpty someKey
should print
Exiting because someKey is empty
bash
New contributor
add a comment |
I have written a little function that exits if the value of the function argument is empty, I would like to be able to also print the name of the parameter (not the value!) if it is possible, my following implementation fails to print the name of the parameter.
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${!1} is empty"
exit 1
fi
}
when called like so
exitIfEmpty someKey
should print
Exiting because someKey is empty
bash
New contributor
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
16 hours ago
@choroba I want to print the parameter name if possible not its value.
– Xerxes
16 hours ago
1
What do you mean by the name? Function arguments don't have names.
– choroba
16 hours ago
add a comment |
I have written a little function that exits if the value of the function argument is empty, I would like to be able to also print the name of the parameter (not the value!) if it is possible, my following implementation fails to print the name of the parameter.
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${!1} is empty"
exit 1
fi
}
when called like so
exitIfEmpty someKey
should print
Exiting because someKey is empty
bash
New contributor
I have written a little function that exits if the value of the function argument is empty, I would like to be able to also print the name of the parameter (not the value!) if it is possible, my following implementation fails to print the name of the parameter.
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${!1} is empty"
exit 1
fi
}
when called like so
exitIfEmpty someKey
should print
Exiting because someKey is empty
bash
bash
New contributor
New contributor
edited 14 hours ago
GAD3R
27.5k1858114
27.5k1858114
New contributor
asked 16 hours ago
XerxesXerxes
1936
1936
New contributor
New contributor
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
16 hours ago
@choroba I want to print the parameter name if possible not its value.
– Xerxes
16 hours ago
1
What do you mean by the name? Function arguments don't have names.
– choroba
16 hours ago
add a comment |
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
16 hours ago
@choroba I want to print the parameter name if possible not its value.
– Xerxes
16 hours ago
1
What do you mean by the name? Function arguments don't have names.
– choroba
16 hours ago
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
16 hours ago
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
16 hours ago
@choroba I want to print the parameter name if possible not its value.
– Xerxes
16 hours ago
@choroba I want to print the parameter name if possible not its value.
– Xerxes
16 hours ago
1
1
What do you mean by the name? Function arguments don't have names.
– choroba
16 hours ago
What do you mean by the name? Function arguments don't have names.
– choroba
16 hours ago
add a comment |
3 Answers
3
active
oldest
votes
What gets passed to the function is just a string. If you run func somevar
, what is passed is the string somevar
. If you run func $somevar
, what is passed is (the word-split) value of the variable somevar
. Neither is a variable reference, a pointer or anything like that, they're just strings.
If you want to pass the name of a variable to a function, and then look at the value of that variable, you'll need to use a nameref (Bash 4.3 or later, IIRC), or an indirect reference ${!var}
. ${!var}
expands to the value of the variable named by `var.
So, you just have it the wrong way in the script, if you pass the name of a variable to function, use "${!1}"
to get the value of the variable named in $1
, and plain "$1"
to get the name.
E.g. this will print variable bar is empty, exiting
, and exit the shell:
#!/bin/bash
exitIfEmpty() {
if [ -z "${!1}" ]; then
echo "variable $1 is empty, exiting"
exit 1
fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
2
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
16 hours ago
ITYMecho 'Exit because $1 is empty'
orecho "Exit because $1 is empty"
-- single-quote strings don't do variable expansion; double-quoted strings require$
to be escaped
– jimbobmcgee
12 hours ago
add a comment |
Pass the name as second argument
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${2} is empty"
exit 1
fi
}
exitIfEmpty $someKey someKey
New contributor
Here in the question, OP needs to check the value of first argument if it's set else exit; also OP may have not only passing single argument to the function.
– αғsнιη
13 hours ago
This doesn't work. If$someKey
is empty then the call will beexitIfEmpty someKey
and$2
will be unset. Always quote variables:exitIfEmpty "$someKey" someKey
.
– John Kugelman
9 hours ago
add a comment |
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
});
}
});
Xerxes 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%2f508764%2fprint-name-if-parameter-passed-to-function%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
What gets passed to the function is just a string. If you run func somevar
, what is passed is the string somevar
. If you run func $somevar
, what is passed is (the word-split) value of the variable somevar
. Neither is a variable reference, a pointer or anything like that, they're just strings.
If you want to pass the name of a variable to a function, and then look at the value of that variable, you'll need to use a nameref (Bash 4.3 or later, IIRC), or an indirect reference ${!var}
. ${!var}
expands to the value of the variable named by `var.
So, you just have it the wrong way in the script, if you pass the name of a variable to function, use "${!1}"
to get the value of the variable named in $1
, and plain "$1"
to get the name.
E.g. this will print variable bar is empty, exiting
, and exit the shell:
#!/bin/bash
exitIfEmpty() {
if [ -z "${!1}" ]; then
echo "variable $1 is empty, exiting"
exit 1
fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar
add a comment |
What gets passed to the function is just a string. If you run func somevar
, what is passed is the string somevar
. If you run func $somevar
, what is passed is (the word-split) value of the variable somevar
. Neither is a variable reference, a pointer or anything like that, they're just strings.
If you want to pass the name of a variable to a function, and then look at the value of that variable, you'll need to use a nameref (Bash 4.3 or later, IIRC), or an indirect reference ${!var}
. ${!var}
expands to the value of the variable named by `var.
So, you just have it the wrong way in the script, if you pass the name of a variable to function, use "${!1}"
to get the value of the variable named in $1
, and plain "$1"
to get the name.
E.g. this will print variable bar is empty, exiting
, and exit the shell:
#!/bin/bash
exitIfEmpty() {
if [ -z "${!1}" ]; then
echo "variable $1 is empty, exiting"
exit 1
fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar
add a comment |
What gets passed to the function is just a string. If you run func somevar
, what is passed is the string somevar
. If you run func $somevar
, what is passed is (the word-split) value of the variable somevar
. Neither is a variable reference, a pointer or anything like that, they're just strings.
If you want to pass the name of a variable to a function, and then look at the value of that variable, you'll need to use a nameref (Bash 4.3 or later, IIRC), or an indirect reference ${!var}
. ${!var}
expands to the value of the variable named by `var.
So, you just have it the wrong way in the script, if you pass the name of a variable to function, use "${!1}"
to get the value of the variable named in $1
, and plain "$1"
to get the name.
E.g. this will print variable bar is empty, exiting
, and exit the shell:
#!/bin/bash
exitIfEmpty() {
if [ -z "${!1}" ]; then
echo "variable $1 is empty, exiting"
exit 1
fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar
What gets passed to the function is just a string. If you run func somevar
, what is passed is the string somevar
. If you run func $somevar
, what is passed is (the word-split) value of the variable somevar
. Neither is a variable reference, a pointer or anything like that, they're just strings.
If you want to pass the name of a variable to a function, and then look at the value of that variable, you'll need to use a nameref (Bash 4.3 or later, IIRC), or an indirect reference ${!var}
. ${!var}
expands to the value of the variable named by `var.
So, you just have it the wrong way in the script, if you pass the name of a variable to function, use "${!1}"
to get the value of the variable named in $1
, and plain "$1"
to get the name.
E.g. this will print variable bar is empty, exiting
, and exit the shell:
#!/bin/bash
exitIfEmpty() {
if [ -z "${!1}" ]; then
echo "variable $1 is empty, exiting"
exit 1
fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar
answered 16 hours ago
ilkkachuilkkachu
62.7k10103180
62.7k10103180
add a comment |
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
2
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
16 hours ago
ITYMecho 'Exit because $1 is empty'
orecho "Exit because $1 is empty"
-- single-quote strings don't do variable expansion; double-quoted strings require$
to be escaped
– jimbobmcgee
12 hours ago
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
2
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
16 hours ago
ITYMecho 'Exit because $1 is empty'
orecho "Exit because $1 is empty"
-- single-quote strings don't do variable expansion; double-quoted strings require$
to be escaped
– jimbobmcgee
12 hours ago
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
echo "Exiting because $1 is empty"
should do the trick.
answered 16 hours ago
PankiPanki
838412
838412
2
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
16 hours ago
ITYMecho 'Exit because $1 is empty'
orecho "Exit because $1 is empty"
-- single-quote strings don't do variable expansion; double-quoted strings require$
to be escaped
– jimbobmcgee
12 hours ago
add a comment |
2
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
16 hours ago
ITYMecho 'Exit because $1 is empty'
orecho "Exit because $1 is empty"
-- single-quote strings don't do variable expansion; double-quoted strings require$
to be escaped
– jimbobmcgee
12 hours ago
2
2
Wouldn't this always print
Exiting because is empty
, if the test is against $1
also? That doesn't seem very useful.– ilkkachu
16 hours ago
Wouldn't this always print
Exiting because is empty
, if the test is against $1
also? That doesn't seem very useful.– ilkkachu
16 hours ago
ITYM
echo 'Exit because $1 is empty'
or echo "Exit because $1 is empty"
-- single-quote strings don't do variable expansion; double-quoted strings require $
to be escaped– jimbobmcgee
12 hours ago
ITYM
echo 'Exit because $1 is empty'
or echo "Exit because $1 is empty"
-- single-quote strings don't do variable expansion; double-quoted strings require $
to be escaped– jimbobmcgee
12 hours ago
add a comment |
Pass the name as second argument
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${2} is empty"
exit 1
fi
}
exitIfEmpty $someKey someKey
New contributor
Here in the question, OP needs to check the value of first argument if it's set else exit; also OP may have not only passing single argument to the function.
– αғsнιη
13 hours ago
This doesn't work. If$someKey
is empty then the call will beexitIfEmpty someKey
and$2
will be unset. Always quote variables:exitIfEmpty "$someKey" someKey
.
– John Kugelman
9 hours ago
add a comment |
Pass the name as second argument
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${2} is empty"
exit 1
fi
}
exitIfEmpty $someKey someKey
New contributor
Here in the question, OP needs to check the value of first argument if it's set else exit; also OP may have not only passing single argument to the function.
– αғsнιη
13 hours ago
This doesn't work. If$someKey
is empty then the call will beexitIfEmpty someKey
and$2
will be unset. Always quote variables:exitIfEmpty "$someKey" someKey
.
– John Kugelman
9 hours ago
add a comment |
Pass the name as second argument
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${2} is empty"
exit 1
fi
}
exitIfEmpty $someKey someKey
New contributor
Pass the name as second argument
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${2} is empty"
exit 1
fi
}
exitIfEmpty $someKey someKey
New contributor
New contributor
answered 16 hours ago
JShorthouseJShorthouse
37316
37316
New contributor
New contributor
Here in the question, OP needs to check the value of first argument if it's set else exit; also OP may have not only passing single argument to the function.
– αғsнιη
13 hours ago
This doesn't work. If$someKey
is empty then the call will beexitIfEmpty someKey
and$2
will be unset. Always quote variables:exitIfEmpty "$someKey" someKey
.
– John Kugelman
9 hours ago
add a comment |
Here in the question, OP needs to check the value of first argument if it's set else exit; also OP may have not only passing single argument to the function.
– αғsнιη
13 hours ago
This doesn't work. If$someKey
is empty then the call will beexitIfEmpty someKey
and$2
will be unset. Always quote variables:exitIfEmpty "$someKey" someKey
.
– John Kugelman
9 hours ago
Here in the question, OP needs to check the value of first argument if it's set else exit; also OP may have not only passing single argument to the function.
– αғsнιη
13 hours ago
Here in the question, OP needs to check the value of first argument if it's set else exit; also OP may have not only passing single argument to the function.
– αғsнιη
13 hours ago
This doesn't work. If
$someKey
is empty then the call will be exitIfEmpty someKey
and $2
will be unset. Always quote variables: exitIfEmpty "$someKey" someKey
.– John Kugelman
9 hours ago
This doesn't work. If
$someKey
is empty then the call will be exitIfEmpty someKey
and $2
will be unset. Always quote variables: exitIfEmpty "$someKey" someKey
.– John Kugelman
9 hours ago
add a comment |
Xerxes is a new contributor. Be nice, and check out our Code of Conduct.
Xerxes is a new contributor. Be nice, and check out our Code of Conduct.
Xerxes is a new contributor. Be nice, and check out our Code of Conduct.
Xerxes 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%2f508764%2fprint-name-if-parameter-passed-to-function%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
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
16 hours ago
@choroba I want to print the parameter name if possible not its value.
– Xerxes
16 hours ago
1
What do you mean by the name? Function arguments don't have names.
– choroba
16 hours ago