Bash数组不能正确写入变量中

问题描述 投票:0回答:1

我试图写一个简单的bash脚本,将一个十进制数计算成二进制数。一切都很好,直到我计算一个比255更高的数字。现在的问题是,这对于255这个数字是有效的,但是对于更高的数字,它做了一些我不明白的事情,结果是0-9的数字,这在逻辑上是不可能的。有谁知道为什么吗?.已经谢谢你了!

巴什:`

#!/bin/bash

function thegreatervalue {

declare -a localArray
local -a localArray
outN=""
Gmain=$eingabe
Gmod=$eingabe
Gout="Result: "
GoutC=""

localArray[counter]=""

while [ $Gmain -ne 0 ];
do
    counter=""
    minuscounter=""

    if [ $(( $Gmod % 2 )) -eq 1 ];then
        localArray[counter]+="1"

    else
        localArray[counter]+="0"

    fi

    Gmain=$(( $Gmain / 2 ))
    Gmod=$(( $Gmod / 2 ))
    counter=$(( $counter + 1 ))
    minuscounter=$(( $minuscounter + 1 ))

done

echo "in the LoAr: ${localArray[@]}"

while [ $minuscounter -ne 0 ];
do
    i=$minuscounter
    i=$(( $i - 1 ))
    minuscounter=$(( $minuscounter - 1 ))
    outN=$(( $outN + "${localArray[i]}" ))
done

while [ $(( 8 - ${#outN} )) -ne 0 ];
do
    outN+="0"
done

echo $Gout$outN

}
echo "Decimal: "
    read eingabe 

if [ $eingabe -gt 254 ];then
    thegreatervalue

else
    echo "enter a number higher than 254!"
fi
`
arrays bash variables binary
1个回答
0
投票
$bc <<< "obase=2;255"
11111111
$bc <<< "obase=2;256"
100000000

二进制

255 --> 11111111 (8位数) 256 --> 100000000 (9位数)

while [ $(( 8 - ${#outN} )) -ne 0 ];
do
    outN+="0"
done

你的这部分代码无法正常工作,因为 8 - ${#outN} 负面新闻不断

© www.soinside.com 2019 - 2024. All rights reserved.