bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Return from function depending on number of parameters


From: Chris Elvidge
Subject: Re: Return from function depending on number of parameters
Date: Sat, 4 Jul 2020 12:54:03 +0100
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

On 03/07/2020 11:16 pm, Eli Schwartz wrote:
On 7/3/20 2:00 PM, Chris Elvidge wrote:
I've used 'return $((!$#))' and 'return $[!$#]' to return an error if no
parameters given to function.

Tested in a bash script 'exit $((!$#)) / $[!$#]' - both work.

'echo  $((!$#)) / $[!$#]' - both echo 1 when no params, 0 when any
number of params.

I'm told ( https://wiki.bash-hackers.org/scripting/obsolete ) that
$[...] is obsolete and that $((...)) should be used instead. OK so far.

However 'N=0; echo $((!$N))' gives an error at the bash prompt. 'echo
$[!$N]' echo's 1 as expected.

"gives an error" is a useless bug report. It works for me.

$ N=0; echo $((!$N))
1

My initial reaction to reading this thread is head scratching!

As the other reply mentioned, there's actually a good explanation for
why we get different results -- I disabled an annoying feature.

$ set -o histexpand

Now here's a useful bug report. "When I run this, I get the following
incorrect results or error message":

$ N=0; echo $((!$N))
N=0; echo $((histexpandN))
0
$ N=0; echo $((!$N))
N=0; echo $(()N))
-bash: syntax error near unexpected token `)'
$ N=0
$ echo $((!$N))
echo $((N=0N))
-bash: N=0N: value too great for base (error token is "0N")

...

 From there, people can give useful advice for solving the problem. (My
preferred advice is "disable histexpand".)


Thanks for the pointers to a better bug report.
And thanks for the info on histexpand. I obviously should read the manual more carefully - I'd never come across it - as it's set by default, not in any profile or bashrc file.
Did you mean set +o histexpand to disable the feature?


--

Chris Elvidge





reply via email to

[Prev in Thread] Current Thread [Next in Thread]