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 info on histexpand and the advice on bug reporting.
Obviously I didn't read the manual - I didn't know about histexpand.
Should that be 'set +o histexpand' to turn it off?
--
Chris Elvidge
England