1

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 然后在其环境中看到 aSUPPRESSbits=65536而不是SUPPRESSbits="1000000000000000"并以解析错误结束。

4

2 回答 2

6

简单的方法:

$ dc <<<2o123p
1111011

$ bc <<<'obase=2; 123'
1111011
于 2012-04-18T15:21:38.930 回答
1

我怀疑 bash 但你总是可以使用 perl:

a=123; b=$(perl -e 'printf "%b", "'$a'"'); echo $b
1111011
于 2012-04-18T15:19:16.037 回答