Not replying for Chet, who will have the definitive answer, I will say that I, personally, think that is working as designed. ~ 0 (with space between) is definitely the "not" operator. But without the middle space, ~0, where there is a white space character in front of the tilde, looks to me like the normal "get the home directory for the following id" processing. Eg: ~0 gets the home for the 0 user (same as ~user) whereas in "a~0", then tilde is simply a character. This is basically how ever other Bourne type shell seems to work.
On Sun, Nov 27, 2016 at 2:33 PM, Bize Ma <binaryze...@gmail.com> wrote: > Configuration Information: > Machine: x86_64 > OS: linux-gnu > Compiler: gcc > Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' > -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' > -DCONF_VENDOR > uname output: Linux zeus 4.8.0-1-amd64 #1 SMP Debian 4.8.5-1 (2016-10-28) > x86_64 GNU/Linux > Machine Type: x86_64-pc-linux-gnu > > Bash Version: 4.4 > Patch Level: 5 > Release Status: release > > Description: > The ~ operator is called not, and does a one's complement of the > following value. That works correctly with > > $ echo $(( ~1 )) > -2 > > Even with > > $ echo $(( ~0 )) > -1 > > But fails with this: > > $ echo $((~0)) > bash: /home/user: syntax error: operand expected (error token is > "/home/user") > > > > Repeat-By: > > Use $((~0)) (without spaces) to generate the error. > -- Heisenberg may have been here. Unicode: http://xkcd.com/1726/ Maranatha! <>< John McKown