是 2 的力量

$ ispow2() { return $((!($1!=0&&($1&$1-1)==0))); }
$ i=0
$ while [ $i -lt 100 ]; do
>     if ispow2 $((i=i+1)); then
>         echo $i
>     fi
> done
1
2
4
8
16
32
64

$1!=0 0 不是 2 的幂。

($1&$1-1)==0 取消最低位 。如果它是唯一的那么数字是 2 的幂。

额外的 ! 用于将值修正为 shell 所期望的值,这与传统的真/假值相反(零为真,非零为假,零为假,非零为真)。