Bash массив неправильно записан в переменную - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь написать простой bash скрипт, который преобразует десятичное число в двоичное. все работает хорошо, пока я не вычислю число больше 255. Мне пришлось читать идентификатор справа налево для правильного результата, поэтому я решил создать функцию, которая сохранит 0 и 1 в массиве для каждого из них. затем я записываю массив в переменную, начиная с наивысшего числа. Теперь проблема в том, что это работает для числа 255, но для более высоких чисел он делает что-то, чего я не могу понять, результатом являются числа от 0 до 9, которые логически не могут быть возможными. Есть у кого-нибудь идеи, почему? Уже спасибо!

Bash: `

#!/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
`

1 Ответ

0 голосов
/ 07 мая 2020
$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}, будет продолжать расти отрицательно

...