Print name if parameter passed to function Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election Results Why I closed the “Why is Kali so hard” questionFunction to evaluate variables in BASHHow do I get the value of a named option of an already running process in Linux?Conditional execution block with || and parentheses problemShell valid function name charactersWhile loop with result from function - BASHGet specific result from functionBash function assign value to passed parameterFunction to iterate over arrayHow am I allowed to pass a void parameter through bash functions?Pass parameter to Bash function which will serve as a pattern to awk
Why didn't this character "real die" when they blew their stack out in Altered Carbon?
If a contract sometimes uses the wrong name, is it still valid?
Is it ethical to give a final exam after the professor has quit before teaching the remaining chapters of the course?
When were vectors invented?
What does this icon in iOS Stardew Valley mean?
Can an alien society believe that their star system is the universe?
Should I discuss the type of campaign with my players?
How widely used is the term Treppenwitz? Is it something that most Germans know?
Fundamental Solution of the Pell Equation
Generate an RGB colour grid
English words in a non-english sci-fi novel
How to bypass password on Windows XP account?
Why aren't air breathing engines used as small first stages
How do pianists reach extremely loud dynamics?
Is it true that "carbohydrates are of no use for the basal metabolic need"?
How discoverable are IPv6 addresses and AAAA names by potential attackers?
How to react to hostile behavior from a senior developer?
What does an IRS interview request entail when called in to verify expenses for a sole proprietor small business?
What is the logic behind the Maharil's explanation of why we don't say שעשה ניסים on Pesach?
How to find out what spells would be useless to a blind NPC spellcaster?
Why did the rest of the Eastern Bloc not invade Yugoslavia?
Why am I getting the error "non-boolean type specified in a context where a condition is expected" for this request?
Naming the result of a source block
Denied boarding although I have proper visa and documentation. To whom should I make a complaint?
Print name if parameter passed to function
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
2019 Community Moderator Election Results
Why I closed the “Why is Kali so hard” questionFunction to evaluate variables in BASHHow do I get the value of a named option of an already running process in Linux?Conditional execution block with || and parentheses problemShell valid function name charactersWhile loop with result from function - BASHGet specific result from functionBash function assign value to passed parameterFunction to iterate over arrayHow am I allowed to pass a void parameter through bash functions?Pass parameter to Bash function which will serve as a pattern to awk
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
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
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
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
Mar 26 at 15:08
@choroba I want to print the parameter name if possible not its value.
– Xerxes
Mar 26 at 15:09
1
What do you mean by the name? Function arguments don't have names.
– choroba
Mar 26 at 15:32
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
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
edited Mar 26 at 17:42
GAD3R
28.3k1958114
28.3k1958114
asked Mar 26 at 15:06
XerxesXerxes
1956
1956
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
Mar 26 at 15:08
@choroba I want to print the parameter name if possible not its value.
– Xerxes
Mar 26 at 15:09
1
What do you mean by the name? Function arguments don't have names.
– choroba
Mar 26 at 15:32
add a comment |
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
Mar 26 at 15:08
@choroba I want to print the parameter name if possible not its value.
– Xerxes
Mar 26 at 15:09
1
What do you mean by the name? Function arguments don't have names.
– choroba
Mar 26 at 15:32
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
Mar 26 at 15:08
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
Mar 26 at 15:08
@choroba I want to print the parameter name if possible not its value.
– Xerxes
Mar 26 at 15:09
@choroba I want to print the parameter name if possible not its value.
– Xerxes
Mar 26 at 15:09
1
1
What do you mean by the name? Function arguments don't have names.
– choroba
Mar 26 at 15:32
What do you mean by the name? Function arguments don't have names.
– choroba
Mar 26 at 15:32
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 whose name is stored in 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
Also:: "$!1:?Variable $1 is empty or unset"
.
– Kusalananda♦
Mar 27 at 10:16
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
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
3
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
Mar 26 at 15:30
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
Mar 26 at 19:22
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
);
);
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 whose name is stored in 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
Also:: "$!1:?Variable $1 is empty or unset"
.
– Kusalananda♦
Mar 27 at 10:16
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 whose name is stored in 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
Also:: "$!1:?Variable $1 is empty or unset"
.
– Kusalananda♦
Mar 27 at 10:16
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 whose name is stored in 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 whose name is stored in 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
edited Mar 27 at 10:07
answered Mar 26 at 15:24
ilkkachuilkkachu
63.5k10104181
63.5k10104181
Also:: "$!1:?Variable $1 is empty or unset"
.
– Kusalananda♦
Mar 27 at 10:16
add a comment |
Also:: "$!1:?Variable $1 is empty or unset"
.
– Kusalananda♦
Mar 27 at 10:16
Also:
: "$!1:?Variable $1 is empty or unset"
.– Kusalananda♦
Mar 27 at 10:16
Also:
: "$!1:?Variable $1 is empty or unset"
.– Kusalananda♦
Mar 27 at 10:16
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
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
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
Pass the name as second argument
function exitIfEmpty()
if [ -z "$1" ]
then
echo "Exiting because $2 is empty"
exit 1
fi
exitIfEmpty "$someKey" someKey
edited Mar 27 at 17:30
answered Mar 26 at 15:18
JShorthouseJShorthouse
54829
54829
add a comment |
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
3
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
Mar 26 at 15:30
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
Mar 26 at 19:22
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
3
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
Mar 26 at 15:30
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
Mar 26 at 19:22
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
echo "Exiting because $1 is empty"
should do the trick.
edited 14 hours ago
answered Mar 26 at 15:07
PankiPanki
872512
872512
3
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
Mar 26 at 15:30
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
Mar 26 at 19:22
add a comment |
3
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
Mar 26 at 15:30
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
Mar 26 at 19:22
3
3
Wouldn't this always print
Exiting because is empty
, if the test is against $1
also? That doesn't seem very useful.– ilkkachu
Mar 26 at 15:30
Wouldn't this always print
Exiting because is empty
, if the test is against $1
also? That doesn't seem very useful.– ilkkachu
Mar 26 at 15:30
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
Mar 26 at 19:22
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
Mar 26 at 19:22
add a comment |
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
Mar 26 at 15:08
@choroba I want to print the parameter name if possible not its value.
– Xerxes
Mar 26 at 15:09
1
What do you mean by the name? Function arguments don't have names.
– choroba
Mar 26 at 15:32