Which is the best way to check return result?When is double-quoting necessary?Input validation in a bash scriptScript that asks for four words, then tells the user the word they chose. Output error?Get specific result from functionbash script to extract string from last output lineif statement with grepHow to check a set of lines in a text file for patterns using awk, sed, or grep?Check whether any value is zero using jq and return 0 to the calling shell scriptBash assign variable result of bool function, then checkshell script if output equal any ip addressbash: Boolean math and unary '!'
Do any Labour MPs support no-deal?
Can an x86 CPU running in real mode be considered to be basically an 8086 CPU?
Can a German sentence have two subjects?
How is it possible to have an ability score that is less than 3?
A Journey Through Space and Time
Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?
Underlining section titles
XeLaTeX and pdfLaTeX ignore hyphenation
Shell script not opening as desktop application
The magic money tree problem
What are these boxed doors outside store fronts in New York?
How to add power-LED to my small amplifier?
Using theabspage from the 'perpage' package
Accidentally leaked the solution to an assignment, what to do now? (I'm the prof)
Why not use SQL instead of GraphQL?
What is the command to reset a PC without deleting any files
strToHex ( string to its hex representation as string)
What do the dots in this tr command do: tr .............A-Z A-ZA-Z <<< "JVPQBOV" (with 13 dots)
How to make payment on the internet without leaving a money trail?
Why was the small council so happy for Tyrion to become the Master of Coin?
Python: Add Submenu
Is it possible to make sharp wind that can cut stuff from afar?
Is it tax fraud for an individual to declare non-taxable revenue as taxable income? (US tax laws)
How do we improve the relationship with a client software team that performs poorly and is becoming less collaborative?
Which is the best way to check return result?
When is double-quoting necessary?Input validation in a bash scriptScript that asks for four words, then tells the user the word they chose. Output error?Get specific result from functionbash script to extract string from last output lineif statement with grepHow to check a set of lines in a text file for patterns using awk, sed, or grep?Check whether any value is zero using jq and return 0 to the calling shell scriptBash assign variable result of bool function, then checkshell script if output equal any ip addressbash: Boolean math and unary '!'
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
Then I check this "return", but I don't understand why "if" does not work because the return equal 1.
Code:
#!/bin/bash
# Main folders
INPUT="input"
OUTPUT="output"
# Functions
function checkFolderExist()
if [ -d $1 ]
then
# 0 = true
# Change to 0, only for tests.
return 1
else
mkdir $1
result=$?
if [ result==0 ]
then
# 0 = true
return 0
else
# 1 = false
return 1
fi
fi
CHECKINPUT=$(checkFolderExist $INPUT)
echo $?
CHECKOUTPUT=$(checkFolderExist $OUTPUT)
echo $?
# If folders does not exist, exit the script
if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
echo "[+] Error. Folder does not exist. Check user permissions."
exit 1
fi
bash shell-script
add a comment |
I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
Then I check this "return", but I don't understand why "if" does not work because the return equal 1.
Code:
#!/bin/bash
# Main folders
INPUT="input"
OUTPUT="output"
# Functions
function checkFolderExist()
if [ -d $1 ]
then
# 0 = true
# Change to 0, only for tests.
return 1
else
mkdir $1
result=$?
if [ result==0 ]
then
# 0 = true
return 0
else
# 1 = false
return 1
fi
fi
CHECKINPUT=$(checkFolderExist $INPUT)
echo $?
CHECKOUTPUT=$(checkFolderExist $OUTPUT)
echo $?
# If folders does not exist, exit the script
if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
echo "[+] Error. Folder does not exist. Check user permissions."
exit 1
fi
bash shell-script
add a comment |
I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
Then I check this "return", but I don't understand why "if" does not work because the return equal 1.
Code:
#!/bin/bash
# Main folders
INPUT="input"
OUTPUT="output"
# Functions
function checkFolderExist()
if [ -d $1 ]
then
# 0 = true
# Change to 0, only for tests.
return 1
else
mkdir $1
result=$?
if [ result==0 ]
then
# 0 = true
return 0
else
# 1 = false
return 1
fi
fi
CHECKINPUT=$(checkFolderExist $INPUT)
echo $?
CHECKOUTPUT=$(checkFolderExist $OUTPUT)
echo $?
# If folders does not exist, exit the script
if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
echo "[+] Error. Folder does not exist. Check user permissions."
exit 1
fi
bash shell-script
I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
Then I check this "return", but I don't understand why "if" does not work because the return equal 1.
Code:
#!/bin/bash
# Main folders
INPUT="input"
OUTPUT="output"
# Functions
function checkFolderExist()
if [ -d $1 ]
then
# 0 = true
# Change to 0, only for tests.
return 1
else
mkdir $1
result=$?
if [ result==0 ]
then
# 0 = true
return 0
else
# 1 = false
return 1
fi
fi
CHECKINPUT=$(checkFolderExist $INPUT)
echo $?
CHECKOUTPUT=$(checkFolderExist $OUTPUT)
echo $?
# If folders does not exist, exit the script
if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
echo "[+] Error. Folder does not exist. Check user permissions."
exit 1
fi
bash shell-script
bash shell-script
edited Apr 3 at 11:56
Rui F Ribeiro
42k1483142
42k1483142
asked Apr 3 at 11:54
jaskjask
484
484
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
There's a few things here.
- You very seldom have to explicitly check
$?against anything or save it in a variable (unless you need to reference the same exit status multiple times). - The exit status of a function is the exit status of the last executed command in the function, so an explicit
returnis seldom needed (seldom with an explicit return value at least). - A function that checks whether a directory exists should not create any directories. Better call it
create_dir_if_needed. - There's an error in
[ result==0 ]. The stringresult==0is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted[ "$result" -eq 0 ]instead. - Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.
With these things in mind:
create_dir_if_needed ()
mkdir -p -- "$1"
This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.
You would use this as
if ! create_dir_if_needed "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
or, since the function is trivial, you could get rid of it and say
if ! mkdir -p -- "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:
create_dir_if_needed ()
if [ -d "$1" ]; then
return
fi
mkdir -- "$1"
or,
create_dir_if_needed () mkdir -- "$1"
A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.
Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!
– jask
Apr 4 at 10:32
1
@jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing formkdirbut applies to most command line utilities.
– Kusalananda♦
Apr 4 at 10:50
add a comment |
Bash does not work like regular programming languages when it comes to returning values.
Here you are confusing output from checkFolderExist with return status from checkFolderExist.
Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.
Should you really want to save your function’s return status for later use you should rather do:
checkFolderExist "$INPUT"
CHECKINPUT=$?
checkFolderExist "$OUTPUT"
CHECKOUTPUT=$?
Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.
Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.
– jask
Apr 4 at 11:17
add a comment |
You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:
Either do a return:
myfunc()
return 1
myfunc
ret=$?
[ $ret -eq 0 ] && echo OK
or write to stdout and check the output:
myfunc()
echo '1'
ret="$(myfunc)"
[ "$ret" = '0' ] && echo OK
Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.
It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.
Great!! Thanks for the info.
– jask
Apr 4 at 11:18
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%2f510269%2fwhich-is-the-best-way-to-check-return-result%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
There's a few things here.
- You very seldom have to explicitly check
$?against anything or save it in a variable (unless you need to reference the same exit status multiple times). - The exit status of a function is the exit status of the last executed command in the function, so an explicit
returnis seldom needed (seldom with an explicit return value at least). - A function that checks whether a directory exists should not create any directories. Better call it
create_dir_if_needed. - There's an error in
[ result==0 ]. The stringresult==0is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted[ "$result" -eq 0 ]instead. - Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.
With these things in mind:
create_dir_if_needed ()
mkdir -p -- "$1"
This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.
You would use this as
if ! create_dir_if_needed "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
or, since the function is trivial, you could get rid of it and say
if ! mkdir -p -- "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:
create_dir_if_needed ()
if [ -d "$1" ]; then
return
fi
mkdir -- "$1"
or,
create_dir_if_needed () mkdir -- "$1"
A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.
Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!
– jask
Apr 4 at 10:32
1
@jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing formkdirbut applies to most command line utilities.
– Kusalananda♦
Apr 4 at 10:50
add a comment |
There's a few things here.
- You very seldom have to explicitly check
$?against anything or save it in a variable (unless you need to reference the same exit status multiple times). - The exit status of a function is the exit status of the last executed command in the function, so an explicit
returnis seldom needed (seldom with an explicit return value at least). - A function that checks whether a directory exists should not create any directories. Better call it
create_dir_if_needed. - There's an error in
[ result==0 ]. The stringresult==0is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted[ "$result" -eq 0 ]instead. - Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.
With these things in mind:
create_dir_if_needed ()
mkdir -p -- "$1"
This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.
You would use this as
if ! create_dir_if_needed "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
or, since the function is trivial, you could get rid of it and say
if ! mkdir -p -- "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:
create_dir_if_needed ()
if [ -d "$1" ]; then
return
fi
mkdir -- "$1"
or,
create_dir_if_needed () mkdir -- "$1"
A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.
Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!
– jask
Apr 4 at 10:32
1
@jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing formkdirbut applies to most command line utilities.
– Kusalananda♦
Apr 4 at 10:50
add a comment |
There's a few things here.
- You very seldom have to explicitly check
$?against anything or save it in a variable (unless you need to reference the same exit status multiple times). - The exit status of a function is the exit status of the last executed command in the function, so an explicit
returnis seldom needed (seldom with an explicit return value at least). - A function that checks whether a directory exists should not create any directories. Better call it
create_dir_if_needed. - There's an error in
[ result==0 ]. The stringresult==0is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted[ "$result" -eq 0 ]instead. - Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.
With these things in mind:
create_dir_if_needed ()
mkdir -p -- "$1"
This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.
You would use this as
if ! create_dir_if_needed "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
or, since the function is trivial, you could get rid of it and say
if ! mkdir -p -- "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:
create_dir_if_needed ()
if [ -d "$1" ]; then
return
fi
mkdir -- "$1"
or,
create_dir_if_needed () mkdir -- "$1"
A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.
There's a few things here.
- You very seldom have to explicitly check
$?against anything or save it in a variable (unless you need to reference the same exit status multiple times). - The exit status of a function is the exit status of the last executed command in the function, so an explicit
returnis seldom needed (seldom with an explicit return value at least). - A function that checks whether a directory exists should not create any directories. Better call it
create_dir_if_needed. - There's an error in
[ result==0 ]. The stringresult==0is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted[ "$result" -eq 0 ]instead. - Remember to always double quote variable expansions and command substitutions, unless you know in what contexts this is not needed.
With these things in mind:
create_dir_if_needed ()
mkdir -p -- "$1"
This would return the exit status of mkdir -p -- "$1". This command would create the named directory (and any intermediate directories) if this did not already exist. If the mkdir command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function. mkdir -p will not fail if the directory already exists.
You would use this as
if ! create_dir_if_needed "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
or, since the function is trivial, you could get rid of it and say
if ! mkdir -p -- "$dirpath"; then
printf 'Failed to create directory "%s"n' "$dirpath" >&2
exit 1
fi
A variation of the create_dir_if_needed function that uses mkdir without -p and will therefore never create missing parent directories to the given directory path:
create_dir_if_needed ()
if [ -d "$1" ]; then
return
fi
mkdir -- "$1"
or,
create_dir_if_needed () mkdir -- "$1"
A call to this function would return true (zero) if the directory already existed or if the mkdir call went well. A return statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the [ -d "$1" ] test.
edited Apr 3 at 13:22
Stéphane Chazelas
313k57592949
313k57592949
answered Apr 3 at 12:04
Kusalananda♦Kusalananda
140k17261435
140k17261435
Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!
– jask
Apr 4 at 10:32
1
@jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing formkdirbut applies to most command line utilities.
– Kusalananda♦
Apr 4 at 10:50
add a comment |
Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!
– jask
Apr 4 at 10:32
1
@jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing formkdirbut applies to most command line utilities.
– Kusalananda♦
Apr 4 at 10:50
Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!
– jask
Apr 4 at 10:32
Amazing!! Your explanation was incredible. Thanks a lot. One more thing. What does "--" in mkdir means? It is the first time that I see this. Thanks a lot!
– jask
Apr 4 at 10:32
1
1
@jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for
mkdir but applies to most command line utilities.– Kusalananda♦
Apr 4 at 10:50
@jask The double dash is a way of saying "there are no further command line options". We use it here because we don't know the value of the variable that we use. If its value starts with a dash, it would be mistaken for a set of command line options. This is not a special thing for
mkdir but applies to most command line utilities.– Kusalananda♦
Apr 4 at 10:50
add a comment |
Bash does not work like regular programming languages when it comes to returning values.
Here you are confusing output from checkFolderExist with return status from checkFolderExist.
Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.
Should you really want to save your function’s return status for later use you should rather do:
checkFolderExist "$INPUT"
CHECKINPUT=$?
checkFolderExist "$OUTPUT"
CHECKOUTPUT=$?
Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.
Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.
– jask
Apr 4 at 11:17
add a comment |
Bash does not work like regular programming languages when it comes to returning values.
Here you are confusing output from checkFolderExist with return status from checkFolderExist.
Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.
Should you really want to save your function’s return status for later use you should rather do:
checkFolderExist "$INPUT"
CHECKINPUT=$?
checkFolderExist "$OUTPUT"
CHECKOUTPUT=$?
Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.
Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.
– jask
Apr 4 at 11:17
add a comment |
Bash does not work like regular programming languages when it comes to returning values.
Here you are confusing output from checkFolderExist with return status from checkFolderExist.
Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.
Should you really want to save your function’s return status for later use you should rather do:
checkFolderExist "$INPUT"
CHECKINPUT=$?
checkFolderExist "$OUTPUT"
CHECKOUTPUT=$?
Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.
Bash does not work like regular programming languages when it comes to returning values.
Here you are confusing output from checkFolderExist with return status from checkFolderExist.
Your CHECKINPUT and CHECKOUTPUT variables will be empty because your function does not echo nor printf anything.
Should you really want to save your function’s return status for later use you should rather do:
checkFolderExist "$INPUT"
CHECKINPUT=$?
checkFolderExist "$OUTPUT"
CHECKOUTPUT=$?
Besides this, I’d anyway recommend you to follow the advices in Kusalananda’s answer that direct you to better techniques to address the problem.
answered Apr 3 at 13:11
LL3LL3
1,0667
1,0667
Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.
– jask
Apr 4 at 11:17
add a comment |
Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.
– jask
Apr 4 at 11:17
Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.
– jask
Apr 4 at 11:17
Thanks mate!! As you can see I come from a "standard" language programming so, to me, bash is slightly different. Thanks for your explanation.
– jask
Apr 4 at 11:17
add a comment |
You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:
Either do a return:
myfunc()
return 1
myfunc
ret=$?
[ $ret -eq 0 ] && echo OK
or write to stdout and check the output:
myfunc()
echo '1'
ret="$(myfunc)"
[ "$ret" = '0' ] && echo OK
Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.
It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.
Great!! Thanks for the info.
– jask
Apr 4 at 11:18
add a comment |
You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:
Either do a return:
myfunc()
return 1
myfunc
ret=$?
[ $ret -eq 0 ] && echo OK
or write to stdout and check the output:
myfunc()
echo '1'
ret="$(myfunc)"
[ "$ret" = '0' ] && echo OK
Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.
It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.
Great!! Thanks for the info.
– jask
Apr 4 at 11:18
add a comment |
You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:
Either do a return:
myfunc()
return 1
myfunc
ret=$?
[ $ret -eq 0 ] && echo OK
or write to stdout and check the output:
myfunc()
echo '1'
ret="$(myfunc)"
[ "$ret" = '0' ] && echo OK
Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.
It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.
You are mixing up output versus return value of a function. I show you minimal working examples, so you can see your mistake:
Either do a return:
myfunc()
return 1
myfunc
ret=$?
[ $ret -eq 0 ] && echo OK
or write to stdout and check the output:
myfunc()
echo '1'
ret="$(myfunc)"
[ "$ret" = '0' ] && echo OK
Also note that I prefer distinguishing integer from string of the variable ret, which is not really necessary if you know that the output can only be numeric but makes it cleaner. Furtheron, capturing the return value into a variable is not necessary if the conditional statement follows immediately.
It is the first one you wanted to have, so you must not use $(). You really mixed them: Return value as in the first example, and checking output as in the second example.
edited Apr 3 at 17:11
answered Apr 3 at 17:01
rexkogitansrexkogitans
405313
405313
Great!! Thanks for the info.
– jask
Apr 4 at 11:18
add a comment |
Great!! Thanks for the info.
– jask
Apr 4 at 11:18
Great!! Thanks for the info.
– jask
Apr 4 at 11:18
Great!! Thanks for the info.
– jask
Apr 4 at 11:18
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%2f510269%2fwhich-is-the-best-way-to-check-return-result%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