在bash中将数字转换为位域字符串

时间:2012-04-18 15:01:31

标签: bash shell math bits

bash中将数字转换为像1101这样的位域字符串可能是最简洁的方法吗?

实际上我试图做与

相反的事情
echo $[2#1101]

为什么:我需要向一个程序发送一个参数,该程序采用像“0011010110”这样的完整字符串形式的位域,但通常只需要启用一个或几个位,如下所示:

SUPPRESSbits=$[1<<16] runscript.sh  # OR
SUPPRESSbits=$[1<<3 + 1<<9] runscript.sh  # much more readable when I know what bits 3 and 9 toggle in the program

然后,runscript.sh在其env中看到SUPPRESSbits=65536而不是SUPPRESSbits="1000000000000000",并以解析错误结束。

2 个答案:

答案 0 :(得分:6)

简单方法:

$ dc <<<2o123p
1111011

$ bc <<<'obase=2; 123'
1111011

答案 1 :(得分:1)

我对bash表示怀疑,但你总是可以使用perl:

a=123; b=$(perl -e 'printf "%b", "'$a'"'); echo $b
1111011