Print name if parameter passed to functionFunction 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
Term for the "extreme-extension" version of a straw man fallacy?
Purchasing a ticket for someone else in another country?
How can I get through very long and very dry, but also very useful technical documents when learning a new tool?
Proof of work - lottery approach
Is there a good way to store credentials outside of a password manager?
Closest Prime Number
Did Dumbledore lie to Harry about how long he had James Potter's invisibility cloak when he was examining it? If so, why?
Implement the Thanos sorting algorithm
How do I go from 300 unfinished/half written blog posts, to published posts?
Trouble understanding the speech of overseas colleagues
Is this apparent Class Action settlement a spam message?
What happens if you roll doubles 3 times then land on "Go to jail?"
How do I find the solutions of the following equation?
Sequence of Tenses: Translating the subjunctive
Failed to fetch jessie backports repository
Applicability of Single Responsibility Principle
Why, precisely, is argon used in neutrino experiments?
Is a stroke of luck acceptable after a series of unfavorable events?
How long to clear the 'suck zone' of a turbofan after start is initiated?
How do scammers retract money, while you can’t?
Why Were Madagascar and New Zealand Discovered So Late?
What is the opposite of 'gravitas'?
How do we know the LHC results are robust?
How to Reset Passwords on Multiple Websites Easily?
Print name if parameter passed to function
Function 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
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
yesterday
@choroba I want to print the parameter name if possible not its value.
– Xerxes
yesterday
1
What do you mean by the name? Function arguments don't have names.
– choroba
yesterday
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 yesterday
GAD3R
27.5k1858114
27.5k1858114
New contributor
asked yesterday
XerxesXerxes
1956
1956
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
yesterday
@choroba I want to print the parameter name if possible not its value.
– Xerxes
yesterday
1
What do you mean by the name? Function arguments don't have names.
– choroba
yesterday
add a comment |
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
yesterday
@choroba I want to print the parameter name if possible not its value.
– Xerxes
yesterday
1
What do you mean by the name? Function arguments don't have names.
– choroba
yesterday
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
yesterday
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
yesterday
@choroba I want to print the parameter name if possible not its value.
– Xerxes
yesterday
@choroba I want to print the parameter name if possible not its value.
– Xerxes
yesterday
1
1
What do you mean by the name? Function arguments don't have names.
– choroba
yesterday
What do you mean by the name? Function arguments don't have names.
– choroba
yesterday
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♦
15 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
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
yesterday
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
yesterday
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 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♦
15 hours ago
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♦
15 hours ago
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 15 hours ago
answered yesterday
ilkkachuilkkachu
62.8k10103180
62.8k10103180
Also:: "$!1:?Variable $1 is empty or unset"
.
– Kusalananda♦
15 hours ago
add a comment |
Also:: "$!1:?Variable $1 is empty or unset"
.
– Kusalananda♦
15 hours ago
Also:
: "$!1:?Variable $1 is empty or unset"
.– Kusalananda♦
15 hours ago
Also:
: "$!1:?Variable $1 is empty or unset"
.– Kusalananda♦
15 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
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
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
edited 8 hours ago
New contributor
answered yesterday
JShorthouseJShorthouse
50728
50728
New contributor
New contributor
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
yesterday
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
yesterday
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
yesterday
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
yesterday
add a comment |
echo "Exiting because $1 is empty"
should do the trick.
echo "Exiting because $1 is empty"
should do the trick.
answered yesterday
PankiPanki
838412
838412
3
Wouldn't this always printExiting because is empty
, if the test is against$1
also? That doesn't seem very useful.
– ilkkachu
yesterday
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
yesterday
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
yesterday
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
yesterday
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
yesterday
Wouldn't this always print
Exiting because is empty
, if the test is against $1
also? That doesn't seem very useful.– ilkkachu
yesterday
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
yesterday
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
yesterday
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
-bash
Wait, when you give it "someKey", $1 won't be empty. If it's empty, there's nothing to print.
– choroba
yesterday
@choroba I want to print the parameter name if possible not its value.
– Xerxes
yesterday
1
What do you mean by the name? Function arguments don't have names.
– choroba
yesterday