是 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 所期望的值,這與傳統的真/假值相反(零為真,非零為假,零為假,非零為真)。