我正在尝试在 Shellscript(Bash) 中创建一个简单的程序来计算 2 的补码二进制数。

作为测试,我只使用了 8 位二进制值 (00000100),但我不断收到“Bad Substitution”错误,我不知道为什么。

  #!/bin/bash
binary=00000100
firstBit=${binary:0:1}
secondBit=${binary:1:1}
thirdBit=${binary:2:1}
fourthBit=${binary:3:1}
fifthBit=${binary:4:1}
sixthBit=${binary:5:1}
seventhBit=${binary:6:1}
eighthBit=${binary:7:1}
binaryNew=""
if [[ $firstBit == "1" ]]
then
binaryNew=0
if [[ $secondBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $thirdBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $fourthBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $fifthBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $sixthBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $seventhBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $eighthBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
fi
fi
fi
fi
fi
fi
fi
fi
echo $binaryNew=

任何帮助,将不胜感激。

谢谢

最佳答案

要对 8 位二进制值进行二进制补码:

$ binary=00000100
$ x=$((2#$binary))
$ [ "$x" -gt 127 ] && ((x=x-256)); echo "$x"
4

笔记
  • 表达式 $((2#$binary)) 进行二进制到十进制的转换。
  • [ "$x" -gt 127 ] && ((x=x-256)) 命令对 8 位值执行二进制补码。
  • 关于bash - 2 在 shell 脚本中的补码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47849388/

    10-11 00:19