# GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
bash -c 'unset _;_=42;echo $_;unset _;: $((_=666));echo "$_"'
666
# ksh version sh (AT&T Research) 93u+ 2012-08-01
ksh -c 'unset _;_=42;echo $_;unset _;: $((_=666));echo "$_"'
42
-3,02546243348e-123
# zsh 5.8 (x86_64-ubuntu-linux-gnu)
zsh -c 'unset _;_=42;echo $_;unset _;: $((_=666));echo "$_"'
666
# dash 0.5.10.2-7
zsh -c 'unset _;_=42;echo $_;unset _;: $((_=666));echo "$_"'
42
666
It raises multiple observations:
- I thought the placeholder variable _ was a sinkhole like /dev/null. It
seems like it can get assigned values within arithmetic expressions in
bash, dash and zsh
- The weird working of ksh if out of scope here, look like any number
not power of 2 produces the strange output that is not even an integer.
- Dash seems to handle _ as a regular variable and accept assignment,
which is probably conformant to POSIX shell specifications.
--
Léa Gris