我在最新的 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
就不会评价了。
有人可以帮助我理解这一点吗?
有两种情况会出现此错误:
\nor
Bash 3.2.57 计算算术表达式中逻辑的两边。
或者因为您使用了单个|
按位 \xe2\x88\xa8,而不是双||
逻辑 \xe2\x88\xa8 布尔表达式运算符:
LC_ALL=C bash -c \'a=0; (( a < 100 | 1 / a < 2 )) && echo ok\'\n
Run 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\'\n
Run 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
归档时间: |
|
查看次数: |
127 次 |
最近记录: |