我在最新的 mac 操作系统上使用 shell 脚本“a.sh”进行了实验,其中包含以下内容(精确副本)。
#!/bin/bash
echo $BASH_VERSION
a=0
(( a < 100 || 1 / a < 2 )) && echo ok
Run Code Online (Sandbox Code Playgroud)
我有:
3.2.57(1)-release
./a.sh: line 4: ((: a < 100 || 1 / a < 2 : division by 0 (error token is "< 2 ")
Run Code Online (Sandbox Code Playgroud)
既然a < 100已经是事实了,我想1 / a < 2就不会评价了。
有人可以帮助我理解这一点吗?
有两种情况会出现此错误:
\norBash 3.2.57 计算算术表达式中逻辑的两边。
或者因为您使用了单个|按位 \xe2\x88\xa8,而不是双||逻辑 \xe2\x88\xa8 布尔表达式运算符:
LC_ALL=C bash -c \'a=0; (( a < 100 | 1 / a < 2 )) && echo ok\'\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n
bash: ((: a < 100 | 1 / a < 2 : division by 0 (error token is "a < 2 ")
LC_ALL=C bash -c \'a=0; (( a < 100 || 1 / a < 2 )) && echo ok\'\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n
ok
原因:\n|是按位运算符or。
当用作:
\na < 100 | 1 / a < 2,
按位or应用如下:
100 | 1,
二进制中的女巫相当于01100100 \xe2\x88\xa8 00000001\xe2\x86\x9201100101二进制或101以 10 为基数。
最后:
\na < 100 | 1 / a < 2原来是:
a < 101 / a < 2。
什么时候a=0:
0 < 101 / 0 < 2