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